新闻公告

TLS 1.3是IETF正在制定的TLS 新标准,新的 TLS 1.3 基于 TLS 1.2,将移除对部分弱加密算法如 MD5 和 SHA-22 的支持,TLS 1.3是TLS标准更新过程中变动较大的一次,除了对于运行过程中的若干问题如密码套件的选择、密钥的计算方式、握手消息的发送方式等做了更改。

Multithumb found errors on this page:

There was a problem loading image 'https://yatesun.com/img/tls13-1.png'
There was a problem loading image 'https://yatesun.com/img/tls13-2.png'
There was a problem loading image 'https://yatesun.com/img/tls13-2.png'

TLS 1.3是IETF正在制定的TLS 新标准,新的 TLS 1.3 基于 TLS 1.2,将移除对部分弱加密算法如 MD5 和 SHA-22 的支持,TLS 1.3是TLS标准更新过程中变动较大的一次,除了对于运行过程中的若干问题如密码套件的选择、密钥的计算方式、握手消息的发送方式等做了更改。

TLSv1.3 新特性

  • 将不再支持静态RSA密钥交换,握手将默认使用前向安全(Perfect Forward Secrecy),一个安全性足够强的 Diffie-Hellman 参数。

  • 将移除 ChangeCipherSpec协议。

  • 将大幅改进握手,注重隐私,在握手尽可能早的阶段加密信息,ServerHello 之后的所有消息都是加密的,客户端只需要一次往返就能与服务器建立安全和验证的连接。

  • 客户端将在 ClientHello 阶段将提高 key_share(共用密钥)。

  • Sessions 将在握手完成之后,才会被建立。

  • Renegotiation攻击不可能发生。

  • 绝大部分的握手将处于加密状态。

  • 很多类型的信息现在也有了扩展(如 Certificate Transparency)

    改进后的握手流程

  •  改进后的握手流程

 支持程度

  • nginx

    在 nginx 的最新 mainline 版本 1.13.0 中,可以看到有一条这样的介绍(Feature: the "TLSv1.3" parameter of the "ssl_protocols" directive.),也就是nginx在最新的版本已经加入这个配置选项,并且支持1.3版本的 TLS 了。

  • Firefox

    Firefox 52 已正式支持 TLS 1.3。

  • Chrome

    Google Chrome 浏览器最新版中开始支持TLS 1.3了。

速度提升

在升级 HTTPS 的过程中,很多大型网站会有所顾虑,因为相比传统 HTTP 协议,TLS 的握手会耗费更多的延时,进而会影响网站的打开时间,并且使用TLS还是有可能在第一次连接的时候受到中间人攻击。

在 TLS 1.2 时代,我们可以通过完美前向加密、HTTP/2、HSTS、HSTS preload list、CHACHA20_POLY1305 协议等方式,提升网站的安全性,加快网站的访问速度,这方面也确实起到了很好的效果。

降低延时

访问安全加密网站时,首先要建立共用密钥,这一过程叫做一次握手。有专门的加密消息往来于浏览器和网站之间,每一次连接,TLS握手就随之发生。
通过移动网络访问时,由于 4G 网络的延时,加载时间可能会增加上百ms不等,也会影响到用户体验。

两代协议握手对比

两代协议握手对比

两代协议握手对比

对于 TLS 1.2,每次请求需要2次消息往来,才能完成握手。
对于 TLS 1.3,首次握手只需要1次消息往来,可以节约几十到上百ms不等。

TLS 1.3 改进增加了“不额外增加网络延时”模式(0-RTT)。对于近期访问过的站点,可以直接发送有用的数据,而不需要经过握手。

针对0-RTT及其他相关的扩展性,早在2016年5月之前,微信就基于TLS1.3草案标准,设计实现了一套安全通信协议mmtls。基于TLS1.3的微信安全通信协议mmtls介绍。

因此,加上 HTTP/2 对多资源加载的优化,通过 HTTPS + HTTP/2 完全有希望使得速度比传统 HTTP 协议更快更安全。

Chrome 开启TLSv1.3

在地址栏输入chrome://flags/

  • 找到Maximum TLS version enabled.并选择TLS 1.3

  • 重启浏览器

OpenSSL支持

近期OpenSSL也发布了一篇新文章Using TLS1.3 With OpenSSL。

该文章介绍了新版本的开发进展及一些需要注意事项。

OpenSSL 1.1.1 版本发布,该版本将支持 TLSv1.3,将完全兼容于原有1.1.0,理论上,只要应用支持 1.1.0,那么可以直接升级到 1.1.1。将自动支持 TLSv1.3,而不需要做任何其他操作。

编译的时候,需增加选项enable-tls1_3。

新增加密套件

  • TLS13-AES-256-GCM-SHA384

  • TLS13-CHACHA20-POLY1305-SHA256

  • TLS13-AES-128-GCM-SHA256

  • TLS13-AES-128-CCM-8-SHA256

  • TLS13-AES-128-CCM-SHA256

文章来源:

  • https://yatesun.com/2017/05/tlsv1.3/

参考资料:

  • https://zhuanlan.zhihu.com/p/28850798
  • https://www.inforsec.org/wp/?p=1960
  • https://github.com/openssl/openssl/tree/tls1.3-draft-19