MENU

SSL/TLS 历史与前沿导览

2018 年 11 月 30 日 • 技术流

这篇文章是我的电子商务课大作业。发在这里是供自己和大家参考,如有错误敬请指正。

SSL 和 TLS 实际上是两种协议。SSL 全称 Secure Sockets Layer,即“安全套接层”;TLS 全称 Transport Layer Security,为“传输层安全性协议”。SSL 可以看作是 TLS 的前身。两者的地位和作用基本相同。因此,尽管当今万维网(World Wide Web,简称 Web)上使用最广泛的 HTTPS 是 HTTP over TLS 而非 HTTP over SSL(SSL 反而是淘汰的协议),人们经常还是只说 SSL,就有包含 TLS 的意思,或者严谨如我则写成 SSL/TLS。

SSL/TLS 对于电子商务非常重要。直接接触用户的前端,在浏览、下单、支付、管理等环节使用 SSL/TLS 协议保证其与服务器传输的安全性是十分必要的。缺少 SSL/TLS 技术的电子商务网站甚至无法称为一个合格可信赖的网站。SSL/TLS 也并没有因为 SET 或其他安全技术在电子商务的应用而失色,反而扩散到其他包括电子政务在内的网站,并有专家组制定了新的协议标准,即今年(2018 年 8 月)已发布正式版的 TLS 1.3。

SSL 是网景公司(Netscape)设计的,借助其浏览器产品在万维网上获得了广泛的应用。据说 SSL 1.0 版本从未公开过,因为存在严重的安全漏洞。SSL 2.0 也因为数个严重漏洞被 SSL 3.0 取代。SSL 3.0 发布于 1996 年,经过重新设计,修补了之前的安全漏洞,是当今使用最为广泛的 SSL 系列协议(不算 TLS)的版本。

后来网景将 SSL 交给 IETF(Internet Engineering Task Force,互联网工程任务小组),后者将 SSL 标准化后,推出 TLS 1.0(RFC 2246,1999 年 1 月)。TLS 1.0 与 SSL 3.0 的差异其实非常小,但确实是互不兼容的版本。而 TLS 1.0 也允许降级到 SSL 3.0。2006年又发布了 TLS 1.1(RFC 4346,2006年4月),在功能和安全性上有了改进。当今应用最广泛的版本则是 TLS 1.2(RFC 5246,2008 年 8 月),现代浏览器和大多数 SSL/TLS 库都支持并默认启用它。这当然也是因为后来的 TLS 1.3 姗姗来迟,直到十年后的今年才发布正式版(RFC 8446)。

SSL/TLS 基于信任链设计,规定了交换数据的特定格式,采用数字证书等一套方法(X.509)进行认证,然后用非对称加密算法做身份认证,再交换对称密钥作为会话密钥,以此加密数据。不用非对称加密算法加密数据的原因是速度慢。

现代的 TLS 系列协议已经能够充分保证服务器与客户端之间传输的安全性,包括保密性、数据完整性等等,能防止中途被人(称为“中间人”)窃听或篡改,也能抵御重放攻击(Replay attack)等一些“另类”的攻击方式。重放攻击的一个例子是,假设 Alice 发送了“转账 1000 元给 Bob”的指令,邪恶的 Evil 捕获到这个数据包,再将它发送一遍。这个攻击若是成功,Alice 就额外减少了 1000 元,虽然 Bob 肯定会很高兴。

这样的安全性保证也要求双方使用的 SSL/TLS 版本是最新的。协议发布后,人们逐渐在 SSL 3.0 中发现了严重的安全隐患(更不用说早期的版本)。2014 年的时候谷歌(Google)发现 SSL 3.0 存在设计缺陷,建议禁用 TLS 回退到 SSL 的机制。TLS 1.0 的情况也不乐观,它支持弱密码,还容易受到诸如 BEAST 和 POODLE 之类的攻击。基于这样那样的问题,人们意识到起码应该使用 TLS 1.1(而禁用旧版本协议的支持);TLS 1.1 却处在一个尴尬的中间位置,那就不如一步到位,使用紧跟着发布出来的 TLS 1.2。于是在今年10月份,微软、火狐、谷歌、苹果等浏览器厂商宣布将在两年内淘汰 TLS 1.0 和 TLS 1.1,意味着支持的最低 SSL/TLS 版本将为 TLS 1.2。在电子商务领域,行业标准(PCI DSS,Payment Card Industry Data Security Standard,即第三方支付行业数据安全标准)也早先一步要求禁用 TLS 1.1 以下的 SSL/TLS 协议。

TLS 1.2 算是一个不错的协议。它也存在一些安全瑕疵,但只要维护人员做好相关配置(包括密钥套件的选择)就无妨。但还可以更好。TLS 1.2 延续了一贯的“握手”方式:以 HTTPS 为例,在发送加密数据之前,浏览器和服务器之间需要进行两次往返,我们记作 2-RTT。(或者在恢复连接时进行一次往返。)这显然耗费时间和运算资源。IETF 决定设计一个更新的版本,提高速度,并且增强安全性。后来命名为 TLS 1.3。

TLS 1.3 可谓一个全新的协议,甚至有人主张应该命名为 TLS 2.0 才好。它减少握手延迟,加密握手信息,提高跨协议攻击的弹性,剔除旧功能。一言以蔽之,在速度上大大提升,又在安全上防患于未然。TLS 1.3 将握手减少到 1-RTT,又增加 Early Data 特性,于是支持 0-RTT 恢复——后者使得 HTTPS 几乎跟 HTTP 一样快!美中不足的是支持 Early Data 会有遭受重放攻击的风险,于是文档(RFC 8470)指明了 425 HTTP 状态码去配合使用。

TLS 1.3 还将有一些扩展。例如用户访问 HTTPS 网站时,会以 SNI(Server Name Indication,服务器名称指示)传递所要访问网站的 Host(包含域名)。ESNI(Encrypted SNI,加密的 SNI)考虑到这个问题,将使中间人无法获知用户要访问哪个网站,进一步保护隐私。

如今,流行的 SSL/TLS 开源库 OpenSSL 已经支持 TLS 1.3,火狐浏览器(Firefox)与谷歌浏览器(Chrome)的正式版也都给以默认支持。安全研究人员相信 TLS 1.3 代表了未来。

以往很多网站没有部署 HTTPS,因为会“变慢”。而现今 TLS 1.3 能以较小的时延和资源消耗来保护网站。HTTP/2 也在三年前定稿,通过多路复用等技术提升网页加载速度;各家浏览器仅实现了 HTTPS 上的 HTTP/2 协议,HTTPS 成为事实标准。加上 Brotli 压缩(也只能用于 HTTPS)等技术,HTTPS 网站在某种程度上甚至可以说更快了。在成本方面,Let's Encrypt 等一些 CA 或 CA 代理商也提供了免费的证书签发服务,大大降低了成本。用户社区的成熟及自动化工具的出现也削减了门槛。

诚然,SSL/TLS 不只应用于万维网。互联网不是只有 HTTPS(HTTP over SSL/TLS),也有 FTP over TLS、SMTP over SSL/TLS 等一系列其他应用。这里只是拿大家可能最常用最熟悉的 HTTPS 举例。

总而言之,我们相信,互联网在变得更安全更美好。

【参考资料】

传输层安全性协议,维基百科
TLS 1.3 的前世今生
A Detailed Look at RFC 8446 (a.k.a. TLS 1.3)(英文)
Encrypting SNI: Fixing One of the Core Internet Bugs(英文)
Using Early Data in HTTP(英文)