如何在Ubuntu 19.04、18.04、16.04的Nginx中轻松启用TLS 1.3
在上一篇文章中,我解释了使用OpenSSL 1.1.1编译Nginx源代码以启用TLS 1.3协议的步骤,该步骤于2018年8月正式发布。在本教程中,我将向您展示启用TLS 1.3的更简单方法在Ubuntu 19.04、18.04和16.04上
TLS 1.3带来更高的性能和安全性
在性能方面,TLS 1.2需要两次往返来建立HTTPS连接。 使用TLS 1.3,仅需要一次往返。 TLS 1.3还支持零往返模式(恢复0-RTT会话),允许以前连接到您的网站的客户端将第一条消息上的HTTP请求发送到服务器。 对于移动网络上或远距离位置的用户而言,这具有很大的不同。
在安全性方面,TLS 1.3删除了对旧密码套件的支持,该套件负责诸如ROBOT攻击的漏洞利用。 当然,这是过于简单的解释。 CloudFlare很好地解释了TLS 1.3。
启用TLS 1.3的要求
要使用Nginx启用TLS 1.3,有两个要求。
- 您的Nginx版本必须支持TLS 1.3。 这意味着Nginx 1.13或更高版本。
- Nginx需要使用OpenSSL 1.1.1或更高版本构建。
Ubuntu 18.04和19.04随OpenSSL 1.1.1一起提供
Ubuntu 18.10和19.04存储库中包含OpenSSL 1.1.1,而Ubuntu 18.10 / 19.04存储库中的Nginx软件包是使用OpenSSL 1.1.1构建的。
当Ubuntu 18.04首次发布时,它仅带有OpenSSL 1.0.2。 但是,OpenSSL 1.1.1已反向移植到Ubuntu 18.04.3.。
如果您仍在使用Ubuntu 18.04.2,只需运行以下命令即可升级到18.04.3。
sudo apt update sudo apt upgrade
在Ubuntu 16.04上安装使用OpenSSL 1.1.1构建的Nginx的最新版本
Ubuntu 16.04存储库中的Nginx软件包不是使用OpenSSL 1.1.1构建的。 您可以使用OpenSSL 1.1.1手动编译Nginx,但是这会花费额外的时间,并且当新版本的Nginx出现时,您必须重新编译。 幸运的是,我们可以从Debian开发人员,DNS社区中的重要人物OndřejSurý的PPA(个人软件包档案)中安装Nginx。 他维护着许多用于Debian存储库的软件包,包括Apache,BIND,MariaDB,PHP等。他还是官方certbot PPA的维护者之一。 因此,我信任他的PPA,并在我的服务器上使用它。
如果您之前添加了另一个Nginx存储库(如nginx.org),则将其禁用。 例如,我在其中定义了另一个Nginx存储库 /etc/apt/sources.list.d/nginx-repo.list
文件。 我只是注释掉该文件中的所有行以将其禁用。
要在Ubuntu上添加OndřejSurýNginx PPA,请运行以下命令。
sudo add-apt-repository ppa:ondrej/nginx sudo apt update
然后删除您现有的Nginx软件包。 (您的Nginx配置文件不会被删除。)
sudo apt remove nginx
如果您使用iRedMail和Nginx,请运行 sudo apt remove nginx-full
删除Nginx。
并从PPA安装Nginx。
sudo apt install nginx
当询问您是否要安装新版本的配置文件时,请选择 N
。 您的certbot Nginx插件可能会与Nginx一起删除,因此请重新安装。
sudo apt install python3-certbot-nginx
现在检查Nginx版本。
sudo nginx -V
您应该看到Nginx是使用OpenSSL 1.1.1构建的。
nginx version: nginx/1.14.1 built with OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.0g 2 Nov 2017) TLS SNI support enabled
该PPA还为Ubuntu 16.04提供了OpenSSL 1.1.1。 如果您在Ubuntu 16.04上的Nginx仍与OpenSSL 1.1.0一起运行,则需要升级您的OpenSSL软件包。
sudo apt upgrade
请注意,如果您使用的是Google计算引擎,则在运行上述命令时会看到以下消息。
The following packages have been kept back: libssl1.1 openssl
这是因为OpenSSL 1.1.1软件包与某些Google计算引擎软件包存在冲突。 您将需要运行以下命令来升级OpenSSL。
sudo apt dist-upgrade
在Ubuntu 19.04、18.04和16.04的Nginx虚拟主机中启用TLS 1.3
使用OpenSSL 1.1.1安装Nginx之后,打开Nginx虚拟主机文件。
sudo nano /etc/nginx/conf.d/site.conf
要么
sudo nano /etc/nginx/sites-enabled/site.conf
要启用TLS 1.3,只需添加 TLSv1.3
至 ssl_protocols
SSL服务器块中的指令。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
如果您使用“让我们加密”证书,则可以在以下位置设置SSL配置: /etc/letsencrypt/options-ssl-nginx.conf
文件。 顺便说一下,默认情况下certbot启用 TLSv1
,这是不安全的,您可以将其删除。 如果您使用的是iRedMail和Nginx,则需要在以下位置编辑SSL配置 /etc/nginx/templates/ssl.tmpl
文件。
保存并关闭文件。 然后重新启动Nginx,以使更改生效。
sudo systemctl restart nginx
在Web浏览器中检查TLS版本
使用Firefox 63或更高版本,重新加载网页,右键单击空白区域,然后选择 View Page Info
在上下文菜单中。 去 Security
标签,您将看到正在使用TLS 1.3。
使用Google Chrome 70或更高版本,在您的网站上重新加载网页。 然后按 Ctrl+Alt+I
打开开发人员工具。 去 Security
标签,您将看到正在使用TLS 1.3。
TLSv1.3是否正在Cloudflare和您的原始服务器之间使用?
是。 Cloudflare在前端服务器上支持TLS 1.3,并且在连接到原始服务器时也使用TLSv1.3。 要检查正在使用的TLS版本,可以在以下位置创建自定义日志格式: /etc/nginx/nginx.conf
文件。
sudo nano /etc/nginx/nginx.conf
将以下文字添加到 http
上下文。
log_format combined_ssl '$remote_addr - $remote_user [$time_local] ' '$ssl_protocol/$ssl_cipher ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
保存并关闭文件。 然后添加一个 access_log
SSL中的指令 server
上下文。 日志在 combined_ssl
格式。
access_log /var/log/nginx/your-site.access.log combined_ssl;
保存并关闭文件。 然后重新加载Nginx。 在访问日志文件中,您将看到类似下面的内容,这表明正在使用TLS 1.3。
172.68.132.115 - - [25/Feb/2020:16:07:26 +0800] TLSv1.3/TLS_AES_256_GCM_SHA384 "GET / HTTP/1.1"
我希望本教程可以帮助您在Ubuntu 19.04,Ubuntu 18.04和Ubuntu 16.04的Nginx中启用TLS 1.3。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂