开发历时近2年,在上个星期,OpenSSL终于发布了v1.1.1的第一个预览版,这也是支持 TLSv1.3 的 OpenSSL 的第一个 Release 。
虽然 TLS1.3 的标准还未修改完成,但绝大部分的浏览器(Chrome)都已经内置了实验性TLS1.3的选项。
下面记录一下 Nginx built with OpenSSL 1.1.1 的过程吧
使用系统: Debian Stretch
编译准备
依赖安装,本人习惯性使用 clang 而非 gcc ,所以把 clang 装上了,不喜请忽略
sudo apt install build-essential clang-3.9 -y
Nginx 在 1.13 才加入了 TLS1.3 的支持,编译时要注意获取 1.13 以上的版本
OpenSSL 1.1.1 pre1 兼容的 TLS1.3 版本为 draft-23
-
- 更新: openssl-1.1.1-pre2 发布
- 2018-09-11更新: 目前 OpenSSL1.1.1 正式版已经发布了,Chrome 预计在 Chrome 70 ( 1个月后发布 stable 版 ) 正式支持正式版的 Tls1.3 ,目前 Chrome 69 Flags 中可选择版本为 Draft 23 ( 对应 OpenSSL 1.1.1 pre2 ) 以及 Draft 28 版 ( 对应 OpenSSL 1.1.1 pre8 ) ,目前已经可以做好切换正式版的准备了
wget http://nginx.org/download/nginx-1.13.9.tar.gz wget https://www.openssl.org/source/openssl-1.1.1-pre2.tar.gz tar zxvf nginx-1.13.9.tar.gz tar zxvf openssl-1.1.1-pre2.tar.gz
编译
OpenSSL 1.1.1 默认开启 tls1.3 ,所以只需要在编译时追加 --with-openssl
即可
cd nginx-1.13.9 COMPILER=clang-3.9 CXX=clang++-3.9 CC=clang-3.9 ./configure \ --with-openssl=../openssl-1.1.1-pre2 \ # 其他编译开关 make sudo make install
安装完成后的 Nginx 为 built with OpenSSL 1.1.1 就是支持 TLS1.3 的了
设定 TLS 1.3
TLS1.3中新增了5种加密套件,分别为
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
Nginx 设定很简单,只需要
ssl_protocols
中新增TLSv1.3
- 在
ssl_ciphers
最前面加入以上5种加密套件
使用 Mozilla 提供的 SSL Configuration Generator 生成并修改即可。
最终看上去的配置是这样的
server { #... ssl_certificate /path/to/signed_cert_plus_intermediates; ssl_certificate_key /path/to/private_key; #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2 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:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS; #... }
启动 Nginx 无错误,然后在浏览器端还需要做一些工作。
要启用 TLS1.3 draft-23 至少需要 Chrome 65 以上( Chrome 64 以下支持的是 TLS1.3 draft-18)
在 chrome://flags/#tls13-variant 中选择 Enabled (Draft 23)
并重启浏览器
访问网站时即可看到 TLS1.3 生效
喵~
Meow~~网站做的不错嗷, 我最近也在学前端的呢….