如何在 Apache 和 Nginx 中启用 TLS 1.3
TLS 1.3是传输层安全性( TLS ) 协议的最新版本,它基于现有的 1.2 规范和适当的IETF 标准:RFC 8446。与之前的版本相比,它提供了更强的安全性和更高的性能改进。
在本文中,我们将向您展示分步指南,以获取有效的 TLS 证书并在托管在Apache或Nginx Web 服务器上的域上启用最新的TLS 1.3版本协议。
要求:
- Apache 版本 2.4.37 或更高版本。
- Nginx 版本 1.13.0 或更高版本。
- OpenSSL 版本 1.1.1 或更高版本。
- 具有正确配置的 DNS 记录的有效域名。
- 有效的 TLS 证书。
从 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
上述命令替换为您的真实域名。
安装 SSL 证书后,您可以按照下面的说明在您的域上启用TLS 1.3 。
在 Nginx 上启用 TLS 1.3
正如我在上面的要求中提到的,从Nginx 1.13版本开始支持TLS 1.3。如果您正在运行旧版本的 Nginx,则需要先升级到最新版本。
# apt install nginx # yum install nginx
检查Nginx版本和编译 Nginx 时所针对的OpenSSL版本(确保nginx版本至少为1.14且openssl版本至少为 1.1.1)。
# nginx -V
示例输出
nginx version: nginx/1.14.1 built by gcc 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC) built with OpenSSL 1.1.1 FIPS 11 Sep 2018 TLS SNI support enabled ....
现在启动、启用并验证 nginx 安装。
# systemctl start nginx.service # systemctl enable nginx.service # systemctl status nginx.service
/etc/nginx/conf.d/example.com.conf
现在使用您最喜欢的编辑器打开 nginx vhost 配置文件。
# vi /etc/nginx/conf.d/example.com.conf
找到ssl_protocols
指令并在行尾附加TLSv1.3 ,如下所示
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; # 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; 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; }
最后,验证配置并重新加载Nginx。
# nginx -t # systemctl reload nginx.service
在 Apache 中启用 TLS 1.3
从Apache 2.4.37开始,您可以利用TLS 1.3。如果您正在运行旧版本的Apache,则需要先升级到最新版本。
# apt install apache2 # yum install httpd
安装后,您可以验证 Apache 和编译 Apache 的 OpenSSL 版本。
# httpd -V # openssl version
现在启动、启用并验证 nginx 安装。
-------------- On Debian/Ubuntu -------------- # systemctl start apache2.service # systemctl enable apache2.service # systemctl status apache2.service -------------- On RHEL/CentOS/Fedora -------------- # systemctl start httpd.service # systemctl enable httpd.service # systemctl status httpd.service
现在使用您最喜欢的编辑器打开 Apache 虚拟主机配置文件。
# vi /etc/httpd/conf.d/vhost.conf OR # vi /etc/apache2/apache2.conf
并找到ssl_protocols
指令并在行尾附加TLSv1.3 ,如下所示。
<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; 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
验证站点是否正在使用 TLS 1.3
通过 Web 服务器配置后,您可以使用Chrome 70+版本上的 Chrome 浏览器开发工具检查您的网站是否通过TLS 1.3协议进行握手。
就这样。您已成功在托管在 Apache 或 Nginx Web 服务器上的域上启用TLS 1.3协议。如果您对本文有任何疑问,请随时在下面的评论部分提问。