TLS 1.3 是传输层安全性(TLS)协议的最新版本,它基于现有的 1.2 版规范和适当的IETF标准:RFC 8446 为它提供了比其前代产品更强的安全性和更好的性能改进。
本教程将逐步展示获取有效的 TLS 证书,并在Apache 和 Nginx Web服务器上对域名启用最新的 TLS 1.3 版协议。
1] 系统要求
- Apache 不低于 2.4.37 版
- Nginx 不低于 1.13.0 版
- OpenSSL 不低于 1.1.1 版
- 一个具有正确 DNS 配置记录的有效域名
- 有效的 TLS 证书
2] 使用 Let’s Encrypt 安装 TLS 证书
要从 Let’s Encrypt 获取免费的SSL证书,需要在 Linux 系统上安装 Acme.sh 客户端以及一些所需的软件包,示例命令如下:
# apt install -y socat git [On Debian/Ubuntu] # dnf install -y socat git [On RHEL/CentOS/Fedora] # mkdir /etc/letsencrypt # git clone https://github.com/Neilpang/acme.sh.git # cd acme.sh # ./acme.sh --install --home /etc/letsencrypt --accountemail your_email@example.com # cd ~ # /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength 2048 # /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength ec-256
注意:在使用以上命令时,需要将 example.com 修改为实际注册的域名。
一旦生成了域名证书,就可以按以下步骤进一步配置 Web 服务器启用 TLS 1.3 协议了。
3] Nginx 启用 TLS 1.3
正如文章开始时强调的一样,TLS 1.3 要求 Nginx 版本高于 1.13,如果使用的是低于此版本的 Nginx,则首先需要升级自己使用的 Nginx。
启用 TLS 1.3 之前,先用如下命令查看 Nginx 和 OpenSSL 均符合要求:
# nginx -V
典型输出如下:
图.1 Nginx版本信息以及OpenSSL信息
如图.1所示,可以看到服务器的 Nginx 和OpenSSL 均满足要求。需要注意的是,如果使用预安装方式安装 Nginx,其采用的OpenSSL 版本多不符合要求,建议采用源代码方式安装 Nginx,在构建时需要添加”–with-openssl=<openssl_source_code_DIR>”选项,具体步骤如下:
# wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz # tar -zxvf openssl-1.1.1.tar.gz # cd Nginx_Source_Code_DIR # ./configure --with-openssl=/root/openssl-1.1.1 ......
示例中”Nginx_Source_Code_DIR”指的是 Nginx 源代码目录,然后构建时用”with-openssl”参数指定一同构建时使用的OpenSSL源代码即可,至于其它构建时需要指定的参数则省略未给出。
所有软件均符合要求后,则修改 Nginx 侦听主机的配置文件,添加TLS 1.3支持:
server { listen 443 ssl http2; server_name www.rultr.com; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; #ssl on; ssl_certificate /etc/letsencrypt/live/www.rultr.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.rultr.com/privkey.pem; # Enable TLSv1.3 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_prefer_server_ciphers on; # Other configure content Her ...... }
配置完成后,使用”nginx -t”命令查看配置文件是否无误,然后重新启动 Nginx服务即可。
4] Apache 启用 TLS 1.3
同样的,只有Apache 2.4.37以上版本,才能使用 TLS 1.3,如果达不到要求,则需要升级自己的 Apache版本。
安装成功后,修改配置文件”vhost.conf”或者”apache2.conf”,定位到”ssl_protocols”指令段,添加如下内容:
<VirtualHost *:443 > SSLEngine On # RSA ssl_certificate /etc/letsencrypt/example.com/fullchain.cer; ssl_certificate_key /etc/letsencrypt/example.com/example.com.key; # ECDSA ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer; ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key; # Enable TLSv1.3 ssl_protocols TLSv1.2 TLSv1.3 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; ssl_prefer_server_ciphers on; SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem ServerAdmin admin@example.com ServerName www.example.com ServerAlias example.com #DocumentRoot /data/httpd/htdocs/example.com/ DocumentRoot /data/httpd/htdocs/example_hueman/ # Log file locations LogLevel warn ErrorLog /var/log/httpd/example.com/httpserror.log CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/example.com/httpsaccess.log.%Y-%m-%d 86400" combined </VirtualHost>
之后,使用如下命令检查配置文件正确与否,并重新启动 Apache:
-------------- On Debian/Ubuntu -------------- # apache2 -t # systemctl reload apache2.service -------------- On RHEL/CentOS/Fedora -------------- # httpd -t # systemctl reload httpd.service
5] 验证网站是否启用了TLS 1.3
一旦网站启用了 TLS 1.3,则可以通过浏览器开发工具检查网站是否通过 TLS 1.3 协议进行握手。例如本站已经启用了TLSv1.3,如果使用 Chrome 浏览器开发者工具安全选项卡查看本站的连接信息,会见到如下页面:
图.2 使用 Chrome 浏览器开发者工具查看网站安全信息
可以看到,浏览器显示本站已经采用TLS 1.3进行加密传输了。
以上就是 Apache 和 Nginx 启用 TLS 1.3的全部内容。