南琴浪博客

Nginx 启用 TLSv1.3

08/14/2018

6 月,OpenSSL 发布了 1.1.1 pre8 版本,开始支持最新的 TLSv1.3 draft28 草案。

几天前,ietf 发布 TLSv1.3 最终定稿 RFC 8446(Via),这将作为 TLSv1.3 的正式版本,结束 draft23 draft28 等草案阶段的历史使命,并为日后的互联网安全提供巨大推动力。

然后在今天,BoringSSL 已提供 TLS_1_3_VERSION (tls13_rfc) 支援(Via)。

关于 TLSv1.3 的特性,可以参照 维基百科 傳輸層安全協議。对于 TLSv1.3 的更多科普,也可参看 dcc 的文章。

今日提交的 BoringSSL Commit d451453 已可用于 TLSv1.3 的正式部署,本博客已启用该特性。

编译

使用 BoringSSL 时,开启 TLSv1.3 要求使用 Nginx master 分支及以上(Via)。BoringSSL 也需采用 master 分支。

git clone --branch=master https://github.com/nginx/nginx.git
git clone --branch=master https://github.com/google/boringssl.git

接下来就是编译,过程参考这篇文章

配置

编译完成后, Nginx 配置文件 server 段添加 ssl_protocols TLSv1.3;

TLSv1.3 现行 cipher 只有以下三种:

TLS-AES-128-GCM-SHA256
TLS-AES-256-GCM-SHA384
TLS-CHACHA20-POLY1305-SHA256

所以 Nginx 配置文件应该是这样写的:

server {
    ...

    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_ciphers  '[TLS13-AES-128-GCM-SHA256|TLS13-CHACHA20-POLY1305-SHA256] TLS13-AES-256-GCM-SHA384 [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305] ECDHE-RSA-AES256-GCM-SHA384';
}