土豆不好吃

为Nginx开启tls 1.3支持,顺便编译openssl1.1.1a

文章目录[显示]

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这俩参数

prefixopenssldir用于控制openssl安装路径。

1.0.2及之前的版本

一般来说不用指定prefix,如果prefix没指定,那么就会使用openssldir

如果未指定openssldir,那么openssldir的默认路径为/usr/local/ssl

1.1.0 及之后版本

我们改啦!应该同时指定prefixopenssldir

简单的办法就是同时指定为/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/


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/tls1_3.html
退出移动版