目前主流支持的 TLS 协议版本是 1.1 和 1.2,分别发布于 2006年和2008年,也都已经落后于时代的需求了。在2018年8月份,IETF终于宣布TLS 1.3规范正式发布了,标准规范(Standards Track)定义在 rfc8446。
TLS 1.3 相较之前版本的优化内容有:
- 针对常见的 Web 资源内容,Brotli 的性能相比 Gzip 提高了 17-25%;
- 应用数据:在会话复用场景下,支持 0-RTT 发送应用数据;
- 握手消息:从 ServerHello 之后都是密文;
- 会话复用机制:弃用了 Session ID 方式的会话复用,采用 PSK 机制的会话复用;
- 密钥算法:TLSv1.3 只支持 PFS (即完全前向安全)的密钥交换算法,禁用 RSA 这种密钥交换算法。对称密钥算法只采用 AEAD 类型的加密算法,禁用CBC 模式的 AES、RC4 算法;
- 密钥导出算法:TLSv1.3 使用新设计的叫做 HKDF 的算法,而 TLSv1.2 是使用PRF算法,稍后我们再来看看这两种算法的差别。
总结一下就是在更安全的基础上还做到了更快,目前 TLS 1.3 的重要实现是 OpenSSL 1.1.1 开始支持了,并且 1.1.1 还是一个 LTS 版本,未来的 RHEL8、Debian10 都将其作为主要支持版本。在 Nginx 上的实现需要 Nginx 1.13+。
安装需求
HTTP/2 要求 Nginx 1.9.5+,,OpenSSL 1.0.2+
TLS 1.3 要求 Nginx 1.13+,OpenSSL 1.1.1+
下载OpenSSL 1.1.1
# cd /usr/local/src # wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz # tar openssl-1.1.1c.tar.gz
安装
# cd /usr/local/src # wget http://nginx.org/download/nginx-1.14.2.tar.gz # tar zxvf nginx-1.14.2 # cd nginx-1.14.2
编译
再原有的nginx编译参数里面添加如下brotli模块重新编译nginx即可
./configure --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_v2_module \ --with-http_addition_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_sub_module \ --with-http_geoip_module \ --with-pcre \ --with-stream \ --with-openssl=../openssl-1.1.1c
nginx配置修改
开启HTTP2支持
监听改为
Liste 443 ssl http2;
只要在 server{} 下的lisen 443 ssl 后添加 http2 即可,不需要再写 ssl on。
TLS 1.3协议开启
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
如果不打算继续支持 IE8,或者一些合规的要求,可以去掉TLSv1。
加密算法支持
加入TLS1.3引入的新算法:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA;
特别注意:需要所有配置SSL协议的虚拟主机开启TLS 1.3协议,TLS 1.3协议才可以生效!