登录
  • 人们都希望被别人需要 却往往事与愿违
  • 作为一名预言家, 马克思失败的原因, 完全在于历史主义的贫乏@《历史决定论的贫困》波普尔 (哲学家 思想家)

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

建站运维 Benny小土豆 2376次浏览 3279字 7个评论
文章目录[显示]

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中即可看到。

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

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://www.bennythink.com/tls1_3.html
喜欢 (1)
分享:-)
Benny小土豆
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(7)个小伙伴在吐槽
  1. 发现 TLSv1.3 是支持了,但是 TLS1.0 TLS1.1 怎么着都无法连接,有解吗?
    欧文斯2019-03-26 10:01 回复
    • Benny小土豆
      你用ssllab或者testssl或者openssl测下,真的1.2 1.1 1.0连不上了?那是你cipher suite配置错了
      如果你是用浏览器测的话……比较新的Chrome和Firefox应该是默认1.3了,除非你到flags里给禁用
      Benny小土豆2019-03-26 10:22 回复
      • 感谢回复,已经确认问题点所在,是 ssl_protocols 配置问题,具体可以看我的文章 https://vircloud.net/operations/upgrade-ssl-done.html。
        欧文斯2019-03-26 11:19 回复
        • Benny小土豆
          感谢分享~
          Benny小土豆2019-03-26 12:14
      • EMM,貌似你评论这里链接识别有问题呢,把句号也纳入到链接了
        欧文斯2019-03-26 11:20 回复
  2. /me pacman -Syu nginx-mainline 🌚 //写点汉字吧,博主外语很捉急
    ホロ2018-12-07 09:59 回复
    • Benny小土豆
      😂秒回啊
      自己编译多好玩!可惜仓库里的不带TLS 1.3支持
      Benny小土豆2018-12-07 10:13 回复