手柄君的小阁

个人私货聚集地

Nginx启用TLS 1.3(Draft 23 & 28 & Final)教程

本文最后更新于 2018 年 10 月 6 日,其中的内容可能有所发展或发生改变,敬请注意。

更新:本文不会继续更新了,请大家自行探索。

本文章为作者 Pt 原创,转载请遵守 CC BY 4.0 协议

更新:最新的 OpenSSL 1.1.1 beta 版本已经更新到了 Draft 28,目前看来只有Firefox Nightly和Chrome beta/dev/canary支持, BoringSSL 已经支持到了 Draft 28
更新:Chrome 65/66/67 稳定版已经支持了 Draft 23,通过 F12 的 Security 选项卡可以看到本站已经使用了 TLS 1.3
更新:使用最新的 nginx 1.14.0 和 openssl 1.1.1 pre7 版本,由于 pre7 版本是 Draft 28,所以我们需要打一个补丁使其同时支持 Draft 23 和 28。
目前 TLS 1.3的正式规范尚未发布,我们支持的只是一个草案,现在也都处于测试阶段。之前浏览器支持的是Draft 18,现在已经放弃了,开始支持Draft 23.

本站使用的Nginx版本是1.14.0,只有最新的1.13/1.14分支才能好的支持TLS 1.3.使用的OpenSSL版本是好多天前发布的OpenSSL 1.1.1-pre7,其携带了对TLS 1.3 Draft 28的支持。
注意:不要在正式环境使用,本文仅供研究测试之用,TLS 1.3现在并不适合部署到正式环境!!!小白用户最好也别折腾,乖乖等正式版吧。
首先先把他们的源码下载下来吧。
wget http://nginx.org/download/nginx-1.15.2.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1-pre9.tar.gz
然后日常解压 接下来我们需要对 OpenSSL 打补丁
tar zxf openssl-1.1.1-pre9.tar.gz
cd openssl-1.1.1-pre9
wget https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-equal-pre9.patch
patch -p1 < openssl-equal-pre9.patch
cd ..
tar zxf nginx-1.15.2.tar.gz
然后我觉得你肯定知道怎么编译nginx
cd nginx-1.15.2 先进入nginx的目录
./configure --your-config --with-openssl=../openssl-1.1.1-pre8 --with-http_v2_module --with-http_ssl_module
明白这意思吧 除非你没有编译过nginx
现在 你可以make了 make如果没有出现error 那就make install安装 之后重启nginx
但是 还没完 你需要修改你的配置文件来启用 TLS 1.3
用下面的替换你原先https配置里的参数
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES;这是我的配置,你可以改改。比如仅支持 TLS 1.2 和 TLS 1.3.
然后重新加载或重启nginx就生效啦。
我比较机智,把这两条写到了一个conf文件里,然后在需要用到的地方直接include,就避免了多次的重复粘贴,美滋滋
如何用浏览器验证是否开启了TLS 1.3呢? Chrome 65 Stable 已经添加了对 TLS 1.3 的支持,可以在 F12 Dev Tools 的 Security 选项卡查看。
或者直接下个Firefox Nightly,默认就启用了 TLS 1.3。
好了就到这里,如果有任何问题回复就行。

  1. 头像 Zvonimir说道:

    openssl-equal-pre7-draft23_28.patch现在没了欸,但是加了draft26的支持

    1. Pt Pt说道:

      嗯 现在有pre8的补丁了 方法都是一样的 此外TLS 1.3正式的RFC 8446也已经发布了 静待openssl和浏览器更新吧

  2. 头像 网友说道:

    不错 很详细 很多人就是不知道 需要所有的配置都加入TLSv1.3的支持,搞得 没有生效!

    1. Pt Pt说道:

      然而..根本没有很多人使用TLS 1.3

吐槽 Pt 放弃治疗