早就听说有TLS1.3了,一直心痒痒,想折腾折腾试试。以前浏览器支持的不多,网上也没太多人试过,不太敢趟雷。现在有一些大型网站网站已经弄上了TLS1.3,也有不少博主给自己的博客升级了TLS1.3了,留下了宝贵的经验。我也忍不住了,今天就来折腾一下看看。Openssl 1.1.1 LTS已经发布,更新一下TLS1.3正式版。
软件版本
Nginx: nginx-1.15.4
OpenSSL: openssl-1.1.1(LTS)
教程
安装依赖
1 2
sudo apt update sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev liblua5.1-dev libluajit-5.1-dev libgeoip-dev google-perftools libgoogle-perftools-dev
下载并解压所需软件
1 2 3 4
wget https://nginx.org/download/nginx-1.15.4.tar.gz tar zxf nginx-1.15.4.tar.gz wget https://www.openssl.org/source/openssl-1.1.1.tar.gz tar zxf openssl-1.1.1.tar.gz
OpenSSL打补丁
1 2 3 4 5 6
pushd openssl-1.1.1 # 打TLS1.3 Draft 23, 26, 28, Final补丁 curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-equal-1.1.1_ciphers.patch | patch -p1 # 打ignore Strict-SNI log 补丁 curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-ignore_log_strict-sni.patch | patch -p1 popd
Nginx补丁
1 2 3 4 5 6 7
pushd nginx-1.15.4 # 打SPDY, HTTP2 HPACK, Dynamic TLS Record, Fix Http2 Push Error, PRIORITIZE_CHACHA补丁 curl https://raw.githubusercontent.com/kn007/patch/43f2d869b209756b442cfbfa861d653d993f16fe/nginx.patch | patch -p1 curl https://raw.githubusercontent.com/kn007/patch/c59592bc1269ba666b3bb471243c5212b50fd608/nginx_auto_using_PRIORITIZE_CHACHA.patch | patch -p1 # 打Strict-SNI补丁 curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1 popd
编译安装Nginx
如果原本编译安装过Nginx,可以输入nginx -V
,查看以前的configure配置。在后面加上所需参数进行编译。
关键参数:
添加--with-openssl=../openssl-1.1.1
来指定OpenSSL路径
HTTP2 HPACK
需要加入--with-http_v2_hpack_enc
参数。
SPDY
需要加入--with-http_spdy_module
注意将--with-openssl
参数改为自己的OpenSSL文件夹地址。
我的完整configure命令如下,请类比进行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
cd nginx-1.15.4 ./configure \ --user=www \ --group=www \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-threads \ --with-file-aio \ --with-pcre-jit \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_gzip_static_module \ --with-http_sub_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_realip_module \ --with-http_addition_module \ --with-stream \ --with-stream_ssl_module \ --with-stream_ssl_preread_module \ --with-stream_realip_module \ --with-http_slice_module \ --with-http_geoip_module \ --with-google_perftools_module \ --with-openssl=../openssl-1.1.1 \ --with-http_v2_hpack_enc \ --with-http_spdy_module
configure完成后,输入以下语句开始编译。
编译完成后,如果没有报错,输入以下内容进行安装。
配置Nginx虚拟主机
将以下内容加入你的conf文件的相应位置,替换掉原本的相应内容。由于安全性升级的考虑,我删除了TLS1和TLS1.1。除此以外,TLS1.3的新加密套件只能在TLS1.3中使用,旧的加密套件不能用于TLS1.3。似乎所有虚拟主机都要配置才能使用TLS1.3。
1 2 3 4 5
ssl_early_data on; ssl_protocols TLSv1.2 TLSv1.3; 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; ssl_ecdh_curve X25519:P-256:P-384; ssl_prefer_server_ciphers on;
最后使用nginx -t
测试nginx配置的正确性。
成功
重启Nginx,你会发现你的网站已经是TLS1.3连接了。
一点问题
我原本使用的是Nginx 1.14.0,现在升级到了1.15.4,配置文件可能会报以下警告。当然,由于只是警告,并不会影响运行,只是我强迫症受不了。
1
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /usr/local/nginx/conf/vhost/www.iszy.cc.conf:22
这是由于在主线版本v1.15.0以后,弃用了ssl
标识。官方原话是这样的:
The “ssl” directive is deprecated; the “ssl” parameter of the “listen” directive should be used instead.
解决方案很简单,只需要删除配置文件中的ssl on
语句,采用listen
语句替代,如listen 443 ssl
。原本就使用listen 443 ssl
语句的就更简单了,直接删除ssl on
语句即可。
后话
好了,到这里,教程算是结束了。OpenSSL 1.1.1 LTS已经正式发布了,TLS1.3也已经正式公布。现阶段,Nginx、Apache等主流web服务器还没有官方支持,还需要通过打补丁的方式进行支持。期待TLS1.3全面铺开后对网络隐私和抗审查作出的贡献。
夜河资源网提供的所有内容仅供学习与交流。通过使用本站内容随之而来的风险以及法律责任与本站无关,所承担的法律责任由使用者承担。
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!