#2018-10-22 更新 Nginx 支持0-RTT模式

OpenSSL 已发布 OpenSSL-1.1.1 版本,已经支持到最新的 TLS1.3 final ,关于 TLS1.3 的优点我已经在TLS1.3展望中提到。同时Nginx-1.15.3之后支持0-RTT握手。

通过这个 Patch 可以使 OpenSSL 同时支持 TLS 1.3 draft 23, 26, 28

目前我使用的是 Nginx-1.15.5 ,所以与 OpenSSL 一同手动编译
下载 OpenSSL 1.1.1 (LTS)

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

git clone https://github.com/hakasenyang/openssl-patch.git
cd openssl
patch -p1 < ../openssl-patch/openssl-equal-1.1.1_ciphers.patch

下载 brotli 压缩算法

git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli

git submodule update –init

下载 Nginx-1.15.5

wget -c http://nginx.org/download/nginx-1.15.5.tar.gz
tar zxf nginx-1.15.5.tar.gz

设定编译参数(OpenSSL中的TLS1.3已经默认开启,编译时不需要加上enable-tls1_3)

cd nginx-1.15.5

./configure --add-module=../ngx_brotli --with-openssl=../openssl-1.1.1 --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module

make
sudo make install

Nginx 的配置 ssl_protocols 中加入 TLSv1.3
同时在 ssl_ciphers 中添加 TLS1.3 的加密套件,支持:

TLS13-AES-128-GCM-SHA256
TLS13-AES-256-GCM-SHA384
TLS13-CHACHA20-POLY1305-SHA256
TLS13-AES-128-CCM-SHA256
TLS13-AES-128-CCM-8-SHA256

推荐设置为:

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_early_data on;以支持 0-RTT 模式,但是此模式下动态站会有重放攻击风险。可用 https://ssl.hakase.io 检测浏览器对0-RTT模式的支持。