TLS1.3 已经正式定稿有一段时间了,Nginx 与 OpenSSL 也相继发布了最新的支持最终版 TLS1.3 的正式版本。本着追求最新技术的原则,本文用尽可能简单的方式来教你搞定 TLS1.3,让你的网站也也开始全免支持 TLS1.3,并且打了 hakasenyang 的 OpenSSL 补丁,从 TLS1.3 draft23 草案版本一路支持到 final 版本,让当下的浏览器就开始支持,免除你的后顾之忧。
系统准备
我的 VPS 系统是 Ubuntu 18.04 TLS,原则上 Ubuntu/Debian 系列可以完全无缝使用,如果想尽可能与本文环境一致,可以使用 萌咖大佬的重装系统脚本 来重新安装为最新的 Ubuntu 18.04 TLS 系统。
因为编译本身需要占用一些系统资源,最小我只在 512M 的搬瓦工 VPS 上成功编译过,再小的内存请酌情增加些虚拟内存。
安装选择
截至至本文发布时,依旧未能有现成的支持 TLS1.3 的 PPA 包使用,所以还是需要选择自己编译。为了简化大家的编译难度,我魔改了一份 angristan 大佬写的 Nginx 自动化安装编译脚本,地址在此,在原版的基础上修改了如下内容:
- 固定 OpenSSL 版本为 1.1.1d 正式版(支持到 TLS1.3 Final 版本)
- 固定 Nginx 版本为 1.17.6 正式版
- 打上 SPDY, HTTP2 HPACK, Dynamic TLS Record, Fix Http2 Push Error Patch
- 打上 hakasenyang 的 OpenSSL Patch,兼容 draft 23、26、27、28 与 final 的多个TLS1.3版本
安装
下载并且运行脚本
sudo wget --no-check-certificate https://raw.githubusercontent.com/feeeei/nginx-autoinstall/master/nginx-autoinstall.sh && chmod +x nginx-autoinstall.sh && ./nginx-autoinstall.sh
选择安装或者更新 Nginx。
脚本还是完保留了原作者的功能,可以选择安装如下 Modules:
- PageSpeed
- Brotli
- Headers More
- GeoIP
- Fancy
- ngx_cache_purge
选择完后等待几分钟即可安装成功。
配置
在 Nginx 中配置:
server {
listen 443 ssl http2;
ssl_certificate ...;//证书地址
ssl_certificate_key ...;//证书地址
//TlS1.0 已经不安全了,不建议使用
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
//这里选择 hakasenyang 作者推荐的兼容补丁的配置
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;
root /var/www/feeeei.com;
index index.php index.html index.htm;
server_name feeeei.com www.feeeei.com;
......
}
配置好之后重启 Nginx,通过浏览器访问网站,在 Chrome 的 Secuity
选项卡中,看到 TLS 1.3 既为开启成功。