添加TLS 1.3 的支持
TLS 1.3 是时隔九年对 TLS 1.2 等之前版本的新升级,也是迄今为止改动最大的一次。针对目前已知的安全威胁,IETF(Internet Engineering Task Force,互联网工程任务组) 制定 TLS 1.3 的新标准,使其有望成为有史以来最安全,但也最复杂的 TLS 协议。
TLS 1.3与之前的差异
TLS 1.3与之前的协议有较大差异,主要在于:
相比过去的的版本,引入了新的密钥协商机制 — PSK
支持 0-RTT 数据传输,在建立连接时节省了往返时间
废弃了 3DES、RC4、AES-CBC 等加密组件,废弃了 SHA1、MD5 等哈希算法
ServerHello 之后的所有握手消息采取了加密操作,可见明文大大减少
不再允许对加密报文进行压缩、不再允许双方发起重协商
DSA 证书不再允许在 TLS 1.3 中使用
对比旧协议中的不足,TLS 1.3 确实可以称得上是向前迈了一大步。既避免之前版本出现的缺陷,也减少了 TLS 握手的时间。
总结就是: 传输更快,更安全
安装依赖
我的 VPS 系统是 Ubuntu 16.04.3 LTS,如果你使用其它发行版,与包管理有关的命令请自行调整。
首先安装依赖库和编译要用到的工具:
yum install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git -y
获取必要组件
ngx_brotli
本站支持 Google 开发的 Brotli 压缩格式,它通过内置分析大量网页得出的字典,实现了更高的压缩比率,同时几乎不影响压缩 / 解压速度。
以前要想支持 ngx_brotli 模块,需要先手动编译 libbrotli。经评论里的朋友提醒,现在已经不用了。直接获取源码即可:
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 -c https://github.com/openssl/openssl/archive/OpenSSL_1_1_1.tar.gz tar xzf OpenSSL_1_1_1.tar.gz mv openssl-OpenSSL_1_1_1 openssl
编译并安装 Nginx
接着就可以获取 Nginx 源码,编译并安装:
http://120.52.51.15/nginx.org/download/nginx-1.14.2.tar.gz tar zxf nginx-1.14.2.tar.gz cd nginx-1.14.2 --prefix=/usr/share/nginx-1.14.2 --user=www --group=www --with-openssl=../openssl --with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers' --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module make && make install ln -s /usr/share/nginx-1.14.2 /usr/share/nginx
enable-tls1_3 是让 OpenSSL 支持 TLS 1.3 的关键选项;而 enable-weak-ssl-ciphers 的作用是让 OpenSSL 继续支持 3DES 等不安全的 Cipher Suite,如果你打算继续支持 IE8,才需要加上这个选项。
除了 http_v2 和 http_ssl 这两个 HTTP/2 必备模块之外,我还额外启用了 http_gzip_static,需要启用哪些模块需要根据自己实际情况来决定。
WEB 站点配置
在 Nginx 的站点配置中,以下两个参数需要修改:
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;
包含 TLS13 是 TLS 1.3 新增的 Cipher Suite,加在最前面即可;如果你不打算继续支持 IE8,可以去掉包含 3DES 的 Cipher Suite。
验证是否支持 TLS 1.3
目前最新版 Chrome 和 Firefox 都支持 TLS 1.3,但需要手动开启:
Chrome,将 chrome://flags/ 中的 Maximum TLS version enabled 改为 TLS 1.3(Chrome 62 中需要将 TLS 1.3 改为 Enabled (Draft),感谢 @TsuranSonoda 指出);
Firefox,将 about:config 中的 security.tls.version.max 改为 4;
官方QQ群号码:922069959(空)、1093596563(空)