随着互联网安全越来越受到重视,越来越多的网站选择启用https来保证数据的加密传输,TLS1.2发布于2008年8月,至今正好有10年,所以新协议TLS1.3呼之欲出。Google chrome在最近的版本更新中也开始对TLS1.3进行支持,TLS1.3对于TLS1.2有重大改写,提高了安全性并且提高了速度,

安装依赖

我用的是Ubuntu 16.04+lnmp.org一键脚本系统,首先安装依赖和编译工具:

sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git

下载Brotli

不需要可略过,可以参考Nginx启用Brotli压缩算法

最新版已经无需安装额外依赖 bagder/libbrotli

cd /usr/local/src/
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
cd ..

下载OpenSSL

为了支持 TLS 1.3 final,需要使用 OpenSSL 1.1.1 正式版:

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

编译并安装 Nginx

cd /usr/local/src
VERSION=1.14.1 #换成你想要的版本
wget http://nginx.org/download/nginx-${VERSION}.tar.gz
tar -xvzf nginx-${VERSION}.tar.gz

cd /usr/local/src/nginx-${VERSION}
./configure  --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=../openssl --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --add-module=/usr/local/src/ngx_brotli

make
sudo make install

如果要支持IE8,添加enable-weak-ssl-ciphers选项

以上步骤会把 Nginx 装到 /usr/local/nginx/ 目录,如需更改路径可以在 configure 时指定。

站点配置

我的站点配置文件在/usr/local/nginx/conf/vhost/hanyibo.com
修改一下两处参数:

ssl_protocols              TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # 增加 TLSv1.3
ssl_ciphers                TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;

如果你不打算继续支持 IE8,可以去掉包含 3DESCipher Suite

测试

Chrome
Nginx开启TLS 1.3
Firefox
Nginx开启TLS 1.3

文章目录