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的全部内容。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注