8月份的时候,TLS1.3正式发布了(RFC 8446),9月份的时候,支持TLS 1.3的Openssl 1.1.1正式发布了。对于我这种喜欢追新的人来说,终于可以升级了……(噢现在是12月哦……)其实……这就是个备忘录。
启用TLS 1.3的要求
需要重新编译Nginx,加入enable-tls1_3
参数,需要浏览器也支持TLS 1.3,如果你使用最新版本的Chrome&Firefox,那么就可以。哦对了,不需要重新编译openssl哦。
下表是目前的几个发行版对openssl版本的支持,虽说和本文内容干毫无关系,仅供观赏。
Ubuntu 18.04 | Openssl 1.1.0g |
Ubuntu 18.10 | Openssl 1.1.1 |
Debian sid | Openssl 1.1.1a |
Debian 9 Stretch | Openssl 1.1.0j |
CentOS 7 | Openssl 1.0.2k |
安装依赖
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git
获取必要组件
openssl 1.1.1a
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz tar xf openssl-1.1.1a.tar.gz && rm openssl-1.1.1a.tar.gz
Nginx 1.15.7
wget https://nginx.org/download/nginx-1.15.7.tar.gz tar xf nginx-1.15.7.tar.gz && rm nginx-1.15.7.tar.gz cd nginx-1.15.7
编译Nginx
./configure --user=www --group=www --prefix=/usr/local/nginx --with-openssl=../openssl-1.1.1a --with-openssl-opt='enable-tls1_3' --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_sub_module --with-stream --with-stream_ssl_module
配置完成之后
make make install
配置
在你的站点的配置文件中,如下配置即可:
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-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
检测与验证
浏览器
升级Chrome吧,默认就应该支持了。直接浏览器访问,开F12在security中即可看到。
ssllabs
https://www.ssllabs.com/ssltest/
testssl
需要1.1.1或更高版本的openssl
./testssl –p –P www.example.com
Openssl
注意,同样需要openssl版本为1.1.1或更高
openssl s_client -connect www.example.com:443 -tls1_3
编译openssl 1.1.1
安装依赖
sudo apt update sudo apt install build-essential checkinstall zlib1g-dev -y
下载并解压缩源代码
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz tar xf openssl-1.1.1a.tar.gz && rm openssl-1.1.1a.tar.gz cd openssl-1.1.1a
配置、编译与安装
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib make && make test make install
关于prefix和openssldir这俩参数
prefix
和openssldir
用于控制openssl安装路径。
1.0.2及之前的版本
一般来说不用指定prefix
,如果prefix
没指定,那么就会使用openssldir
如果未指定openssldir
,那么openssldir
的默认路径为/usr/local/ssl
1.1.0 及之后版本
我们改啦!应该同时指定prefix
和 openssldir
简单的办法就是同时指定为/usr/local/ssl
更新动态库
cd /etc/ld.so.conf.d/ # 创建新文件 vim openssl-1.1.1a.conf # 粘贴如下内容并保存退出 /usr/local/ssl/lib # 重新加载动态库 ldconfig –v
删除(备份)旧的openssl
mv /usr/bin/c_rehash /usr/bin/c_rehash.BEKUP mv /usr/bin/openssl /usr/bin/openssl.BEKUP
把新的加入PATH
类似如下语句,或者做软链接
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/ssl/bin"
参考
https://www.howtoforge.com/tutorial/how-to-install-openssl-from-source-on-linux/
https://wiki.openssl.org/index.php/Compilation_and_Installation#PREFIX_and_OPENSSLDIR
https://imququ.com/post/enable-tls-1-3.html
https://halfrost.com/tls1-3_start/
如果你是用浏览器测的话……比较新的Chrome和Firefox应该是默认1.3了,除非你到flags里给禁用
自己编译多好玩!可惜仓库里的不带TLS 1.3支持