MoeWah

LNMP升级OpenSSL开启TLS1.3
介绍在经历两年的修补改进后,OpenSSL于近日发布了1.1.1版本并承诺至少投入5年的时间支持该版本。OpenS...
扫描右侧二维码阅读全文
04
2019/03

LNMP升级OpenSSL开启TLS1.3

OpenSSL.jpg

介绍

在经历两年的修补改进后,OpenSSL于近日发布了1.1.1版本并承诺至少投入5年的时间支持该版本。OpenSSL1.1.1的一大亮点无疑是支持了TLS1.3。总结一下,TLS 1.3 与以前的版本相比具有如下两个大的优势,分别是:

一、更快的访问速度

为了对比 TLS 1.3 在 TLS 握手阶段的变化, 这里将 TLS 1.2 和 TLS 1.3 在 TLS 握手阶段进行对比。

1.png

△ TLS 1.2 完整握手框架(来自 RFC 5246)

从上图可以看出,使用 TLS 1.2 需要两次往返( 2-RTT )才能完成握手,然后才能发送请求。

2.png

△ 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

改成

    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 --with-openssl=/home/tools/lnmp1.5-full/src/openssl-OpenSSL_1_1_1b ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options} 
    fi

修改完成后,ESC键输入:wq 保存并退出。

接下来给予upgrade_nginx.sh文件执行权限。

chmod +x upgrade_nginx.sh

升级Nginx

cd ~/lnmp1.5-full
./upgrade.sh nginx

这里会弹出一个提示,要求输入升级的Nginx版本号。

upgrade_nginx.png

当前我的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_protocolsssl_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;';
#....略....
}

修改完毕后测试语法

nginx -t

测试通过后,重启nginx即可

/etc/init.d/nginx restart

https_tlsv1.3.png

△ 上图显示在Chrome浏览器测试通过,已成功启用 TLS1.3

注:目前已知支持最新TLS1.3的浏览器有 Chrome&Firefox,而 Safari 据传将在下个系统升级中支持最新协议。

最后修改:2019 年 03 月 08 日 12 : 19 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论