网站搜索

如何在 Apache 和 Nginx 中启用 TLS 1.3


TLS 1.3传输层安全 (TLS) 协议的最新版本,它基于现有的 1.2 规范和适当的 IETF 标准: RFC 8446。与前代产品相比,它提供了更强的安全性和更高的性能改进。

在本文中,我们将向您展示如何获取有效的 TLS 证书并在 Apache 托管的域上启用最新的 TLS 1.3 版本协议,或者Nginx 网络服务器。

要求:

  • 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 [email 
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

现在使用您喜欢的编辑器打开 nginx 虚拟主机配置 /etc/nginx/conf.d/example.com.conf 文件。


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 [email 
     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

通过网络服务器进行配置后,您可以使用 Chrome 70+ 版本上的 Chrome 浏览器开发工具检查您的网站是否通过 TLS 1.3 协议进行握手。

就这样。您已成功在 Apache 或 Nginx Web 服务器上托管的域上启用 TLS 1.3 协议。如果您对本文有任何疑问,请随时在下面的评论部分提问。