1. SSL 与 TLS

1.1. SSL

Secure Socket Layer(安全套接层协议)的缩写,可以在 Internet 上提供秘密性传输。它是在上世纪90年代中期,由 Netscape 公司设计,目前已有3.0版本。

早期互联网上使用的 HTTP 协议是明文的,内容是不加密的,这样就很可能在内容传播的时候被别人监听到,对于安全性要求较高的场合,必须要加密,https 就是带加密的 http 协议。SSL 协议的发明,就解决这些安全问题。目前 SSL 版本有1.0,2.0,3.0。

1.2. TLS

Transport Layer Security(传输层安全协议)。是 SSL的标准化,相当于 SSL 的升级,可以把 SSL 看作是 windows7,而 TLS 看作是windows10。很多时候我们把这两者并列称呼 SSL/TLS,因为这两者可以视作同一个东西的不同阶段。

HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合。可以把 HTTPS 大致理解为—“HTTP over SSL”或“HTTP over TLS”。目前 TLS 版本有 1.0,1.1,1.2,其中 TLS 1.0 版本基于 SSL 3.0,修改不大。

1.3. OpenSSL 支持

OpenSSL 实现了 SSL 协议的 SSLv2 和 SSLv3,支持了其中绝大部分算法协议。

OpenSSL 也实现了 TLSv1.0,TLS 是 SSLv3 的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。

虽然已经有众多的软件实现了 OpenSSL 的功能,但是 OpenSSL 里面实现的 SSL 协议能够让我们对 SSL 协议有一个更加清楚的认识,因为至少存在两点:一是 OpenSSL 实现的 SSL 协议是开放源代码的,我们可以追究 SSL 协议实现的每一个细节;二是 OpenSSL 实现的 SSL 协议是纯粹的 SSL 协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了 SSL 协议的本来面目。

2. SSL/TLS 协议版本间的差异

2.1. SSL 3

SSL 3 于1995年年末发布。为了弥补先前协议版本的诸多弱点,SSL 3 从头开始设计了一套协议,并一直沿用到了最新版本的 TLS。

2.2. TLS 1.0

TLS 1.0 于1999年1月发布。与 SSL 3 相比,它包含了以下改进。

  • 这是定义基于标准 HMAC 的 PRF 的第一个版本。它将 PRF 以 HMAC-MD5 和 HMAC-SHA 的结合(XOR)实现。
  • 生成主密钥使用 PRF,而不是定制的构造方法。
  • verify_data 的值基于 PRF,而不是定制的构造方法。
  • 使用官方 HMAC 作为完整性验证(MAC)。SSL 3 使用的是更早的、已被废弃的 HMAC 版本。
  • 修改填充格式,使其更为可靠。2014年10月,被称为 POODLE 的攻击暴露了 SSL 3的填充机制不安全。
  • 去掉了 FORTEZZA 套件。

协议清理的结果是 TLS 1.0 得到了 FIPS的批准,允许其用于美国政府机构,这是现实中一个非常重要的事件。

2.3. TLS 1.1

TLS 1.1 于2006年4月发布。与 TLS 1.0 相比,它包含以下主要改进。

  • CBC 加密使用包含在每个 TLS 记录中的显式 IV。这弥补了 IV 可预测的弱点。不然这个弱点后面会被 BEAST 攻击所利用。
  • 为了抵抗填充攻击,要求实现使用 bad_record_mac 警报作为填充问题的响应。不再赞成使用 decryption_failed 警报。
  • 这个版本引用包含了 TLS 扩展(RFC 3546)。

2.4. TLS 1.2

TLS 1.2于2008年8月发布。与 TLS 1.1 相比,它包含以下主要改进。

  • 添加已验证加密支持。
  • 添加对 HMAC-SHA256 密码套件的支持。
  • 删除 IDEA 和 DES 密码套件。
  • 虽然大部分扩展的实际文档还是在其他地方,但 TLS 将扩展和协议的主规格说明书进行了集成。
  • 客户端可以使用一种新的扩展(signature_algorithms)来通报它愿意接受的散列和签名算法。
  • 当使用 TLS 1.2 套件或者以协商协议是 TLS 1.2 为条件使用之前的套件时,在 PRF 中使用 SHA256 代替 MD5/SHA1 组合。
  • 允许密码套件定义其自身的 PRF。
  • 使用单一散列代替用于数字签名的 MD5/SHA1 组合。默认使用 SHA256,并且密码套件可以指定其自身使用的散列。签名散列算法以往是由协议强制指定,现在是散列函数式签名结构中的一部分,而且在实施启用中可以选择最佳算法。
  • 密码套件可以显式指定 Finished 消息中的 verify_data 成员的长度。

2.5. TLS 1.3

TLS 1.3 是时隔九年对 TLS 1.2 等之前版本的新升级,也是迄今为止改动最大的一次。针对目前已知的安全威胁,IETF(Internet Engineering Task Force,互联网工程任务组) 正在制定 TLS 1.3 的新标准,使其有望成为有史以来最安全,但也最复杂的 TLS 协议。

TLS 1.3 与之前的协议有较大差异,主要在于:

  • 相比过去的的版本,引入了新的密钥协商机制 — PSK
  • 支持 0-RTT 数据传输,在建立连接时节省了往返时间
  • 废弃了 3DES、RC4、AES-CBC 等加密组件,废弃了 SHA1、MD5 等哈希算法
  • ServerHello 之后的所有握手消息采取了加密操作,可见明文大大减少
  • 不再允许对加密报文进行压缩、不再允许双方发起重协商
  • DSA 证书不再允许在 TLS 1.3 中使用

对比旧协议中的不足,TLS 1.3 确实可以称得上是向前迈了一大步。既避免之前版本出现的缺陷,也减少了 TLS 握手的时间。

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2021-11-01 13:28:23

results matching ""

    No results matching ""