0x01 前言
如果说 HTTP/2 是当前互联网 Web 发展的讨论热点之一,那么下一个热点应该就是 TLS 1.3 了。
上次加密协议更新至今已有八年多,TLS 1.3 的最终版本现已于 2018 年 8 月发布。
0x02 当前的TLS协议存在问题
老版本的 SSL 协议被公认在完整性校验、密钥协商过程中有重大缺陷,因此,2011 年与 2015 年 IETF 小组相继声明禁止使用 SSL 2.0、3.0。
TLS 协议针对此前披露的漏洞做了相应的处理,但是因为其复杂性,还没有一个版本能真正保证绝对的安全。
目前最新版本的 TLS 1.2 发布距今已有九年时间,在此期间,许多 SSL/TLS 协议的新漏洞被发现,比如针对其压缩机制的 CRIME 漏洞,针对 CBC 块加密模式的 BEAST 漏洞(主要是针对 SSL 3.0 和 TLS 1.0),早已不再是当初设计者认为的那么安全,人们迫切需要新的协议将其代替。
0x03 TLS 1.3有哪些变化?
- TLS1.3 大幅提高安全性,还简化了握手过程,使第一次握手时只需要一个RTT,并在第二次访问时提供了 0-RTT 模式,提高了性能降低服务器压力。
- 支持0-RTT数据传输
- 废弃了3DES、RC4、AES-CBC等加密组件。废弃了SHA1、MD5等哈希算法。
- 不再允许对加密报文进行压缩、不再允许双方发起重协商,密钥的改变不再需要发送change_cipher_spec报文给对方。
- 握手阶段的报文可见明文大大减少。
0x04 TLS 1.3完整握手工作流
- +表示该报文中值得注意的extension
- *表示该内容也可能不被发送
- {} 表示该内容使用handshake_key加密
- [] 表示该内容使用application_key加密
0x05 速度优势
在 Web 性能方面,TLS 和加密连接总是增加了一些开销。HTTP / 2 肯定有助于解决这个问题,但 TLS 1.3 通过 TLS 错误启动和零往返时间(0-RTT)等功能帮助加速加密连接。
简单地说,使用 TLS 1.2,需要两次往返才能完成 TLS handshake。使用 1.3 时,它只需要一次往返, 从而将加密延迟减少一半。这有助于这些加密连接感觉比以前更快一点。
0x06 如何为自己站点启用TLS 1.3
演示环境:
- 面板:宝塔面板 6.8.3
- 系统:Centos 7.5
- Nginx:1.15.6
修改网站配置文件
//替换
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
//替换
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
//增加
add_header Strict-Transport-Security "max-age=31536000";
0x07 开启成功
0x08 总结
TLS 1.3 使用了复杂的密钥导出过程,增强了最终使用的密钥的安全性。同时简化了所使用的加密算法,废弃了 RC4、3DES、MD5、SHA1、AES-CBC 等加密算法,删除了压缩、重协商等具有漏洞的机制,大大精简了协议。
因此,TLS 1.3 如果能够得到普及,网络数据的传递将会变得更加安全、隐秘,TLS 1.3 的推广需要每一位开发者、运营者的认可和支持。
目前 TLS 1.3 虽然还在草案阶段,但是其基本原理和思想已经应用在了实际生活中,chrome 等浏览器都已准备好了对其的支持,期待 TLS 1.3 正式成为一个协议规范的那一天。