今天正好周末有时间,就将使用的生产环境 lnmp1.5 给升级到了 lnmp1.6 测试版,对于 TLSv1.3 明月其实没有刚需的,以前就玩儿过(可参考「纯自嗨,LNMP下启用TLSv1.3支持过程全记录」一文),但是当时有个问题就是编译 Nginx 的Lua模块的时候就会出错,应该是跟 openssl 有冲突造成的,所以当时就必须做出取舍了,这次 lnmp 1.6 测试版里军哥已经修复了这个问题了,并且 OpenSSL 1.1.1a 对 TLSv1.3 的支持好像在Chrome浏览器里更完美了,所以就有了今天折腾的这个打算了。

下载.png

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

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

tls-13final13-46-638.jpg

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

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

fast-session-resumption-tls13.png

所以配置 Nginx 支持 TLS 1.3 需要注意一点:默认情况下 Nginx 因为安全原因,没有开启 TLS 1.3 0-RTT,可以通过添加 ssl_early_data on; 指令开启 0-RTT。

ssl_early_data on; #Early data (0-RTT) (推荐开启)

另外请添加 Early-Data 头告知后端, 防止重放攻击

proxy_set_header Early-Data $ssl_early_data;

其他的基本就是参考「纯自嗨,LNMP下启用TLSv1.3支持过程全记录」一文的就可以了。

最后 使用 nginx -t 测试一下 确认无问题

最后修改:2019 年 01 月 26 日
如果觉得我的文章对你有用,请随意赞赏