为Nginx添加TLS1.3支持

Nginx主线分支从1.13.0版本开始支持TLS1.3,只需要在编译的时候选择使用OpenSSL支持TLS1.3的分支进行编译即可.

使用对应的OpenSSL分支进行编译

# OpenSSL对TLS1.3的支持已经到了draft19,不过Chrome和Firefox对TLS1.3的支持还在draft18
git clone -b tls1.3-draft-18 --single-branch https://github.com/openssl/openssl.git openssl

然后在预编译的时候选择该分支,并添加额外选项--with-openssl-opt=enable-tls1_3. 其他操作参考手动编译Nginx支持ALPN,以在最新版Chrome中支持HTTP/2.

浏览器设定

Firefox目前最新版已经默认开启TLS1.3支持(如果不是新安装的Firefox那么可能依然需要检查about:config中的对应设定). Chrome需要在chrome:flags中将TLS 1.3选项调整为Enabled (Draft)

测试

Firefox:

Chrome:

已知问题

由于nginx-ct目前并不支持TLS1.3,所以如果Certificate Transparency是靠该方案实现的话那么开启TLS1.3后无法继续显示Certificate Transparency信息.

该问题在Letsencrypt自带CT信息后得到一定缓解,某些商业证书也不需要nginx-ct来实现CT信息.

更新(September,12,2018)

TLS1.3最终定稿rfc8446,Openssl-1.1.1在几个小时前也正式发布支持.
目前Firefox Nightly版已经支持,Chrome从70开始也支持了.