何为TLS1.3
说白了就是传输层安全协议(Transport Layer Security)的一个新版本,上一代TLS1.2发布距今已有近十年。所以TLS1.3应运而生,与18年8月正式发表,nginx自1.13起就支持TLS1.3,chrome67版本便默认启用TLS1.3。
在大势所趋下本站也支持TLS1.3,但限于基本国情,仍旧支持TLS1.2。
为何TLS1.3
TLS1.3握手只涉及一次往返,较TLS1.2有近一倍的速度提升。
TLS1.3也更加安全,所用加密套件具有前向安全性。
如何TLS1.3
openssl
首先openssl需要1.1.1版本,现在LTS版本也发布了,下载源码解压即可:
1 | wget https://www.openssl.org/source/openssl-1.1.1.tar.gz |
然后如果单给nginx用的话其实都不用make的(好吧其实是我这make失败懒得查了)
nginx
相关配置
首先安装编译依赖:
1 | sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev liblua5.1-dev libluajit-5.1-dev libgeoip-dev google-perftools libgoogle-perftools-dev |
nginx支持需要大于1.13版本,正好我这是1.10的,于是我索性直接升到主线的1.15版了。
下载源码:
1 | wget https://nginx.org/download/nginx-1.15.4.tar.gz |
nginx这边麻烦一点因为要重新编译,欸C/C++的程序就是这样,不跨平台欸,先用nginx -V
查看原来的编译参数,复制下来,然后在后面加上--with-openssl=/your-openssl-path/openssl-1.1.1
,后面的路径记得填自己的。这就是后面要用到的编译参数。
openssl中的TLS1.3已经默认开启,编译时不需要加上
enable-tls1_3
然后有个小坑就是这个版本的openssl和nginx都支持final了所以就不用打补丁了,一开始我打上发现编译失败。
编译
1 | cd nginx-1.15.4 |
按照阿里云t5的速度,大概可以去泡一杯红茶。
nginx配置
注意你make install
后的目录,看下make到哪去了。
像我这原nginx配置在/etc/nginx/
下,按照原来的编译参数,配置文件位置基本不变的,只是直接在命令行输nginx
时还是原来的,新的执行脚本在/usr/share/nginx/sbin/nginx
那里,旁边还有一个nginx.old
。请查看make install的输出找到你的执行脚本。
所以先停止旧nginx:
1 | nginx -s stop |
开启新的:
1 | cd /usr/share/nginx/sbin |
这样就成功升级了nginx。
对于启用TLS1.3需要在配置文件中修改如下内容:
1 | listen 443 ssl; |
注意的是ssl on
这个选项在nginx1.15之后被弃用了,使用listen 443 ssl;
即可。
还有一个值得注意的地方,所以虚拟主机都得启用TLS1.3才会生效(一开始我就高兴的把sites-available
里面的主机都启用了,然后没发现nginx.conf
中还有一个ssl_protocols
,找了半天)。
验证是否成功
去Qualys SSL Labs’s SSL Server Test 即可。
或者在chrome浏览器的更多工具>开发者工具>安全选项卡查看。