Nginx升级1.15.6并启用TLSv1.3

以下操作基于oneinstack,开头一张图,后面全靠编。

禾令奇检测

TLS 1.3 与以前的版本相比具有如下两个大的优势:

  • 更快的访问速度
  • 增强的安全性

TLS 1.2 和 TLS 1.3 握手对比:

TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求

tls12_woshou.png

TLS 1.3 协议只需要一次往返( 1-RTT )就可以完成握手

tls13_0rtt.png

另外TLS 1.3 新增了零 RTT ( 0-RTT )模式,也即在上一次连接中,握手完成之后,服务端会发送一条 ServerConfiguration 消息,在随后的客户端发起第一个 TLS 记录 ClientHello 过程中,直接附加加密的应用程序数据,该模式将会导致更加快速的访问体验。

安装依赖

yum groupinstall -y "Development Tools" 
yum install -y git wget zlib zlib-devel pcre-devel 

20181109,由于1.15.5有漏洞,默认安装1.15.6

下载Nginx 1.15.6

wget https://nginx.org/download/nginx-1.15.6.tar.gz
tar -xzf nginx-1.15.6.tar.gz

打补丁

SPDY, HTTP2 HPACK, Dynamic TLS Record, Fix Http2 Push Error 补丁,这里感谢kn007 大佬的Patch

pushd nginx-1.15.6
curl https://raw.githubusercontent.com/kn007/patch/43f2d869b209756b442cfbfa861d653d993f16fe/nginx.patch | patch -p1
popd

打 Strict-SNI 补丁

pushd nginx-1.15.6
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1
popd

下载OpenSSL

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
tar zxf openssl-1.1.1.tar.gz

打 TLS1.3 Draft 23, 26, 28, Final 补丁

pushd openssl-1.1.1
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-equal-1.1.1_ciphers.patch | patch -p1
popd

编译Nginx

cd nginx-1.15.6
make clean

以下命令根据你实际情况来定,请注意with-openssl= 的路径

./configure --prefix=/usr/local/nginx --user=www --group=www --with-ld-opt=-Wl,-rpath,/usr/local/include/luajit-2.0 --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1 --with-pcre=../pcre-8.42 --with-pcre-jit --with-ld-opt=-ljemalloc --with-http_v2_hpack_enc --with-http_spdy_module
make && make install 
mv /usr/local/nginx/sbin/nginx{,_`date +%F`}
cp objs/nginx /usr/local/nginx/sbin

测试

nginx -t

Nginx里启用TLSv1.3

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers [TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[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;
ssl_prefer_server_ciphers on;
ssl_early_data on;
ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;

刷新配置

service nginx reload

测试结果

hlq20181009-135750.png

https://www.ssllabs.com/ssltest/analyze.html?d=www.helingqi.com

参考:
https://kn007.net/topics/my-nginx-compilation-tour/
https://github.com/hakasenyang/openssl-patch#openssl-11x_ciphers--111-ciphers-draft-23-26-28-final
https://imququ.com/post/enable-tls-1-3.html

本站采用「署名 4.0 国际(CC BY 4.0)」创作共享协议,转载请注明本文出处及链接。

Tags: TLSv1.3,HTTP2,oneinstack

文章翻页

头像
游客
发表评论
  1. 飞翔的企鹅

    好久没关注nginx版本了 黑线.png

  2. 一直用Tengine的我 不高兴.png