介绍
在经历两年的修补改进后,OpenSSL于近日发布了1.1.1版本并承诺至少投入5年的时间支持该版本。OpenSSL1.1.1的一大亮点无疑是支持了TLS1.3。总结一下,TLS 1.3 与以前的版本相比具有如下两个大的优势,分别是:
一、更快的访问速度
为了对比 TLS 1.3 在 TLS 握手阶段的变化, 这里将 TLS 1.2 和 TLS 1.3 在 TLS 握手阶段进行对比。
△ TLS 1.2 完整握手框架(来自 RFC 5246)
从上图可以看出,使用 TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求。
△ TLS 1.3 完整握手框架(来自 TLS 1.3 最新草案 )
TLS 1.3 的握手不再支持静态的 RSA 密钥交换,这意味着必须使用带有前向安全的 Diffie-Hellman 进行全面握手。从上图可以看出,使用 TLS 1.3 协议只需要一次往返( 1-RTT )就可以完成握手。
相比 TLS 1.2,TLS 1.3 的握手时间减半。这意味着访问一个移动端网站,使用 TLS 1.3 协议,可能会减少将近 100ms 的时间。
二、更强的安全性
TLS 的发展有 20 多年的历史,在之前的版本中,TLS 1.2 是高度可配置的,为了更好的兼容旧版本的浏览器,这意味着那些易受攻击的站点始终在运行着不安全的加密算法,这让互联网黑客有可乘之机。
TLS 1.3 在之前版本的基础上删除了那些不安全的加密算法,这些加密算法包括:
- RSA 密钥传输 —— 不支持前向安全性
- CBC 模式密码 —— 易受 BEAST 和 Lucky 13 攻击
- RC4 流密码 —— 在 HTTPS 中使用并不安全
- SHA-1 哈希函数 —— 建议以 SHA-2 取而代之
- 任意 Diffie-Hellman 组—— CVE-2016-0701 漏洞
- 输出密码 —— 易受 FREAK 和 LogJam 攻击
总之,TLS 1.3 相比老版本的 TLS 协议将会更加安全,这也代表着互联网安全的一大进步。
升级 OpenSSL
这里将以军哥LNMP一键包为安装环境,进行简单介绍关于如何将网站升级支持TLS1.3
,有同样使用LNMP一键包的朋友可以参考,其实基本差别并不大。无非就是两个步骤:升级openssl版本&配置HTTPS加密算法。
定位到LNMP
目录下的src
目录(以你的实际情况)
cd ~/lnmp1.5-full/src
下载并解压 OpenSSL1.1.1b
wget --no-check-certificate https://github.com/openssl/openssl/archive/OpenSSL_1_1_1b.zip && unzip OpenSSL_1_1_1b.zip && rm -rf OpenSSL_1_1_1b.zip
修改include
目录中的upgrade_nginx.sh
文件
vi ~/lnmp1.5-full/include/upgrade_nginx.sh
修改下面这段代码:
if echo ${Nginx_Version} | grep -Eqi '^[0-1].[5-8].[0-9]' || echo ${Nginx_Version} | grep -Eqi '^1.9.[1-4]$'; then
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}
else
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}
fi
将 else
之后的 ${Nginx_With_Openssl}
改成 --with-openssl=../openssl-OpenSSL_1_1_1b
即可。修改完成后,ESC键输入:wq
保存并退出。
接下来给予upgrade_nginx.sh
文件执行权限。
chmod +x upgrade_nginx.sh
升级Nginx
cd ~/lnmp1.5-full
./upgrade.sh nginx
这里会弹出一个提示,要求输入升级的Nginx版本号。
当前我的Nginx
版本为1.4.1
,没有必要升级版本,直接输入当前的版本号 1.4.1
按回车键确定,接下来就是等待其自动编译安装完成。
编译完成后,检查一下 openssl
版本号对不对
nginx -V
配置 SSL
1、如果你的网站之前没有配置使用过https。
请参考《Nginx 基本配置详解》 和 《免费申请Let's Encrypt泛域名SSl证书》 这两篇文章。
2、原来已经做了https配置,在此基础增加对TLS1.3的支持。
做了下面的修改。修改vhost
目录下的 xx.com.conf
文件,在配置443
端口 sever
中修改ssl_protocols
和ssl_ciphers
两项内容。
#....略....
server {
listen 443 ssl;
#....略....
ssl_protocols 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:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:SSLCipherSuiteECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256;';
ssl_prefer_server_ciphers on;
#....略....
}
修改完毕后测试语法
nginx -t
测试通过后,重启nginx即可
/etc/init.d/nginx restart
△ 上图显示在Chrome浏览器测试通过,已成功启用 TLS1.3
注:目前已知支持最新TLS1.3的浏览器有 Chrome&Firefox,而 Safari 据传将在下个系统升级中支持最新协议。
相关推荐
- 群晖 Synology 部署 ZeroSSL 泛域名证书
- 因群晖NAS系统CA证书失效导致的系列问题
- ngx_waf:一款高大全的 Nginx 网站防火墙模块
- LNMP 编译安装 ngx_pagespeed 模块给网站提速!
- SSL证书无法通过acme.sh自动续期,竟是因为它!
- 如何彻底禁止百度等搜索引擎收录
文章作者:喵斯基部落
原文地址:https://www.moewah.com/archives/916.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
博主你好,Google搜到你的这篇文章。现在5年维护期已到,openssl 1.1.1w是最后一个1.1.1版本,那么之后想用新的3.x.x(或者更新)的,也能按照文中所写的升级openssl版本吗?
应该是不用的
请问一下,不需要对php重新编译吗?我按照这个操作,在phpinfo里查看的openssl版本不是升级后的。
编译nginx,php不需要编译
我用的是lnmpa,也不需要编译php吗?
主要看你web服务用的是apache还是nginx,这篇文章基于nginx
我看了下虽然是lnmpa,但是配置ssl时也只改nginx,所以只要重新编译nginx就好了。真的很感谢你这篇教程!