由于 Github 没有正式的 Draft 新分支(18/19 已经是很久以前的事了),所以就直接拉主分支了,哔哩萌会不断跟进。

iHappy

编译

主要是 pthread_atfork 报错,(见 Issue 3884), 暂时的解决办法:vi ./objs/Makefile,搜索 -ldl -lz \,删除此行前面的 -lpthread ,并在 \ 前添加 -lpthread,如 -ldl -lz -lpthread \,之后顺利编译。 Nginx 1.13.11 已修复此问题。

testssl 测试

工具链接:https://testssl.sh/

git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh -p https://example.com/

测试结果

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      not offered
 TLS 1.1    not offered
 TLS 1.2    offered (OK)
 TLS 1.3    offered (OK): final
 SPDY/NPN   h2, http/1.1 (advertised)
 HTTP2/ALPN h2, http/1.1 (offered)

注意

OpenSSL 1.1.1 近期更新后 TLSv1.3 ciphersuite 须与 1.1/1.2 分开配置(详见:#191),受制于 Nginx 暂无支持计划( Nginx 称 OpenSSL 团队对于解决意外禁用 TLS 1.3 密码引发的问题未有长远的、明确的方案。详见:#1529)。

因此,短期内 Nginx 使用者将无法调整密码套件优先顺序,如把 CHACHA20-POLY1305-SHA256 放到首位。Apache 计划新增 SSLCipherSuiteV1_3

现在默认的 TLSv1.3 密码套件是:

TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

0-RTT 已实现

从下图得知 Nginx 还未实现 0-RTT 。哔哩萌已支持 0-RTT

Nginx 加入下列配置。

ssl_early_data on

重放攻击

0-RTT 据说有重放攻击的风险,如果启用了 TLS 1.3 0-RTT,最好就告知后端,后端就可以采取措施避免重放攻击造成损害。(RFC-8470 “推荐”)对于使用 Nginx 反代的案例,可以通过 Early-Data 头告知后端服务器。

proxy_set_header Early-Data $ssl_early_data;