TLS 1.3 移除了很多过时的密码学原型和功能(例如压缩、重协商),强制要求完美前向安全。TLS 1.2 支持了很多加密算法(包括 3DES、静态 DH 等),这导致了 FREAK、Logjam、Sweet32 等攻击的出现。TLS 1.3 缩紧了对加密原型的限制,避免了因服务器启用不安全的算法导致协议的安全性受到影响。在这方面的简化也使得运维和开发者配置 TLS 变得更容易,不再容易误用不安全的配置。

  TLS 1.3 之前,整个握手环节都是没有加密保护的,这泄漏了很多信息,包括客户端和服务器的身份。TLS 1.3 对握手的绝大部分信息进行了加密,这保护了用户隐私,也在一定程度上防止了协议僵化问题。

目录

TLS 1.3的优势

  TLS 1.3 只需要一个 RTT 就能完成握手,相比 TLS 1.2 省去了一个 RTT。并且 TLS 1.3 支持 “0-RTT” 模式,在该模式下客户端可以在握手的同时发送数据,极大地加快了页面的加载速度。TLS 1.3 还增加了 ChaCha20/Poly1305 支持,在不支持 AES 硬件指令的老设备上能提升加、解密性能。

TLS1.2 TLS1.3

配置TLS1.3

OpenSSL

1.查看OpenSSL版本

OpenSSL1.0.1以上的版本支持 TLS1.2,OpenSSL1.1.1以上的版本支持 TLS1.3,Centos7阿里云yum源最新版本为“OpenSSL 1.0.2k-fips”。

1
2
$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

2.安装Openssl

最新版本下载地址: https://www.openssl.org/source/

旧版本地址: https://www.openssl.org/source/old/

a.下载最新稳定版本的OpenSSL源码包

1
$ wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz

b.编译并安装

1
2
3
4
$ tar -xzvf openssl-1.1.1l.tar.gz
$ cd openssl-1.1.1l
$ ./config --prefix=/usr/local/openssl 
$ make && make install

c.卸载或替换旧版本OpenSSL

卸载

1
$ yum -y remove openssl openssl-devel

替换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#备份旧的OpenSSL文件
$ mv /usr/bin/openssl /usr/bin/openssl.old
$ mv /usr/lib64/openssl /usr/lib64/openssl.old
$ mv /usr/lib64/libssl.so /usr/lib64/libssl.so.old
#创建软连接
$ ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
$ ln -s /usr/local/openssl/include/openssl /usr/include/openssl
$ ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
$ echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
$ ldconfig -v #显示正在扫描的目录及搜索到的动态链接库

d.验证安装

查看版本

1
2
$ openssl version
OpenSSL 1.1.1l  24 Aug 2021

查看是否支持tls1.3

1
2
3
4
5
6
7
$ openssl s_client --help
...
 -tls1                      Just use TLSv1
 -tls1_1                    Just use TLSv1.1
 -tls1_2                    Just use TLSv1.2
 -tls1_3                    Just use TLSv1.3
...

Nginx

Nginx 1.13 以上的版本支持 TLS 1.3。

1.升级Nginx

a.yum升级

yum安装的Nginx可以直接用update命令升级

1
$ yum -y update nginx

b.平滑升级

使用源码包安装的Nginx,请参考Nginx平滑升级

2.配置Nginx

Nginx配置文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
server {
    ···
    #配置支持的加密协议
    ssl_protocols      TLSv1.1 TLSv1.2 TLSv1.3;
    #支持tlsv1 tls1.1这种老协议,设置为 on;只支持tlsv1.2 tlsv1.3新协议,设置为 off(nginx默认为off)
    ssl_prefer_server_ciphers  on;
    #配置加密套件,RSA和ECC使用不同的套件
    ssl_ciphers     TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256;
    ···
}