- 本文地址: https://www.yangdx.com/2019/02/9.html
- 转载请注明出处
本文所述的操作环境:CentOS 7.6。
TLS 1.3协议规范于2018年8月正式落地,需要openssl 1.1.1版本才支持。
执行指令查看当前系统的openssl版本:
openssl version
显示为:OpenSSL 1.0.2k-fips 26 Jan 2017。执行 yum update 也无法更新到最新版本,只能手动安装。
通过官网www.openssl.org查询,我们得知最新版本为1.1.1a,下面开始安装。
我安装到 /usr/local/openssl-1.1.1a 目录,指令如下:
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar xf openssl-1.1.1a.tar.gz
cd openssl-1.1.1a/
./config --prefix=/usr/local/openssl-1.1.1a zlib shared
make && make install
给动态链接库做软连接:
ln -s /usr/local/openssl-1.1.1a/lib/libssl.so.1.1 /usr/lib64/
ln -s /usr/local/openssl-1.1.1a/lib/libcrypto.so.1.1 /usr/lib64/
把旧版本的openssl进行更名备份:
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
给新版本的openssl做软连接:
ln -s /usr/local/openssl-1.1.1a/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-1.1.1a/include/openssl /usr/include/openssl
最后查看当前的openssl版本,确保安装正确。输入:
openssl version
应显示:OpenSSL 1.1.1a 20 Nov 2018
查看当前openssl版本支持哪些加密套件:
openssl ciphers -V | column -t
输出一堆内容,可以看到最前面3个是TLSv1.3:
下面我们来安装nginx1.14.2。
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar xf nginx-1.14.2.tar.gz
cd nginx-1.14.2/
./configure --prefix=/usr/local/nginx --error-log-path=/home/logs/nginx/error.log --http-log-path=/home/logs/nginx/access.log --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-pcre --with-file-aio --with-http_realip_module --with-http_image_filter_module --with-openssl=../openssl-1.1.1a --with-http_v2_module
make && make install
其中,编译参数 --with-openssl=../openssl-1.1.1a 指向的是我们刚才解压的openss1.1.1a目录,参数 --with-http_v2_module 表示安装HTTP/2模块。
先看看旧的nginx配置文件,没启用TLSv1.3之前,我们一般这样写:
server {
listen 443 ssl;
server_name yangdx.com www.yangdx.com;
index index.html index.php;
root /home/www/website;
ssl_certificate ssl/yangdx.crt;
ssl_certificate_key ssl/yangdx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
......
}
其中,ssl_protocols指定了使用哪些TLS协议,ssl_ciphers则指定了使用哪些加密套件。
最新消息,到2020年,几大主要Web浏览器都将禁用旧的 TLS 1.0 和 TLS 1.1 安全协议。
TLS 1.0/1.1 有很多漏洞,主要表现在旧的浏览器上,如:IE10及更早版本、Safari6及更早版本。
作为新上线的博客,为推崇新技术,本站决定不支持 TLS 1.0/1.1。
去掉 TLS 1.0/1.1 协议,以及添加http2支持,最终配置文件如下:
server {
listen 443 ssl http2; #启用http2
server_name yangdx.com www.yangdx.com;
index index.html index.php;
root /home/www/website;
ssl_certificate ssl/yangdx.crt;
ssl_certificate_key ssl/yangdx.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3; #只使用 TLSv 1.2/1.3
ssl_ciphers ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256; #较安全的加密套件
ssl_prefer_server_ciphers on;
......
}
保存配置并重启nginx,必须重启,只reload是无效的!
使用最新的Chrome浏览器,F12切出开发者工具,切换到Security一栏,确认网站是否已启用TLSv1.3:
切换到Network一栏,调出Protocol列,看看是否有显示h2的协议:
我们可以到 https://myssl.com/ 检验一下,看看网站配置能评多少分。本站是得A+哦!
最后再说一下,如果把ssl_ciphers这行注释,默认就是所有 TLS 1.2/1.3 的套件都支持,但有些套件是不安全的。上面的配置,是我自己根据myssl.com的评测结果筛选出来的比较安全的套件。
是必须要升级 openssl 吗。。。
博主回复:
是的要升级