注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com
TLS 1.3是传输层安全性(TLS)协议的版本,该协议于2018年作为建议的标准发布于 RFC 8446。与以前的产品相比,它提供了安全性和性能方面的改进。
本指南将演示如何在FreeBSD 12上使用Nginx Web服务器启用TLS 1.3。
要求
运行FreeBSD 12的Vultr Cloud Compute(VC2)实例。
有效的域名并正确配置 A
/AAAA
/CNAME
您的域的DNS记录。
有效的TLS证书。我们将从“加密”中获取一个。
Nginx版本 1.13.0
或更高。
OpenSSL版本 1.1.1
或更高。
在你开始之前
检查FreeBSD版本。
uname -ro
# FreeBSD 12.0-RELEASE
确保您的FreeBSD系统是最新的。
freebsd-update fetch install
pkg update && pkg upgrade -y
如果系统上没有必要的软件包,请安装它们。
pkg install -y sudo vim unzip wget bash socat git
使用您的首选用户名创建一个新用户帐户(我们将使用 johndoe
)。
adduser
# Username: johndoe
# Full name: John Doe
# Uid (Leave empty for default):
# Login group [johndoe]:
# Login group is johndoe. Invite johndoe into other groups? []: wheel
# Login class [default]:
# Shell (sh csh tcsh nologin) [sh]: bash
# Home directory [/home/johndoe]:
# Home directory permissions (Leave empty for default):
# Use password-based authentication? [yes]:
# Use an empty password? (yes/no) [no]:
# Use a random password? (yes/no) [no]:
# Enter password: your_secure_password
# Enter password again: your_secure_password
# Lock out the account after creation? [no]:
# OK? (yes/no): yes
# Add another user? (yes/no): no
# Goodbye!
跑过 visudo
命令并取消注释 %wheel ALL=(ALL) ALL
行,以允许成员 wheel
组以执行任何命令。
visudo
# Uncomment by removing hash (#) sign
# %wheel ALL=(ALL) ALL
现在,使用以下命令切换到新创建的用户 su
。
su - johndoe
注意: 更换 johndoe
使用您的用户名。
设置时区。
sudo tzsetup
安装acme.sh客户端并从Let’s Encrypt获取TLS证书
安装 acme.sh
。
sudo pkg install -y acme.sh
检查版本。
acme.sh --version
# v2.7.9
为您的域获取RSA和ECDSA证书。
# RSA
sudo acme.sh --issue --standalone -d example.com --ocsp-must-staple --keylength 2048
# ECC/ECDSA
sudo acme.sh --issue --standalone -d example.com --ocsp-must-staple --keylength ec-256
注意: 更换 example.com
在命令中输入您的域名。
创建目录以存储您的证书和密钥。我们将使用 /etc/letsencrypt
。
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
安装证书并将其复制到 /etc/letsencrypt
目录。
# RSA
sudo acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem
# ECC/ECDSA
sudo acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem
运行上述命令后,您的证书和密钥将位于以下位置:
RSA
: /etc/letsencrypt/example.com
ECC/ECDSA
: /etc/letsencrypt/example.com_ecc
安装Nginx
Nginx在版本1.13.0中添加了对TLS 1.3的支持。 FreeBSD 12系统附带Nginx和OpenSSL,它们均支持TLS 1.3,因此无需构建自定义版本。
通过以下网址下载并安装最新版的Nginx主线版本 pkg
包裹经理。
sudo pkg install -y nginx-devel
检查版本。
nginx -v
# nginx version: nginx/1.15.8
检查用于编译Nginx的OpenSSL版本。
nginx -V
# built with OpenSSL 1.1.1a-freebsd 20 Nov 2018
启动并启用Nginx。
sudo sysrc nginx_enable=yes
sudo service nginx start
配置Nginx
既然我们已经成功安装了Nginx,我们就可以对其进行适当的配置,以开始在服务器上使用TLS 1.3。
跑过 sudo vim /usr/local/etc/nginx/example.com.conf
命令,并使用以下配置填充文件。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.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;
}
保存文件并使用:+ W + Q退出。
现在我们需要包括 example.com.conf
在主要 nginx.conf
文件。
跑 sudo vim /usr/local/etc/nginx/nginx.conf
并将以下行添加到 http {}
块。
include example.com.conf;
注意新 TLSv1.3
的参数 ssl_protocols
指示。仅在Nginx服务器上启用TLS 1.3时才需要此参数。
检查配置。
sudo nginx -t
重新加载Nginx。
sudo service nginx reload
要验证TLS 1.3,可以使用浏览器开发工具或SSL Labs服务。下面的屏幕快照显示了Chrome的“安全性”标签。
您已经在FreeBSD服务器上的Nginx中成功启用了TLS 1.3。 TLS 1.3的最终版本已于2018年8月定义,因此没有更好的时间开始采用这项新技术。
注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com