如何在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,有两个要求。

  1. 您的Nginx版本必须支持TLS 1.3。 这意味着Nginx 1.13或更高版本。
  2. 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.。

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。

nginx tls 1.3 Ubuntu 16.04

使用Google Chrome 70或更高版本,在您的网站上重新加载网页。 然后按 Ctrl+Alt+I 打开开发人员工具。 去 Security 标签,您将看到正在使用TLS 1.3。

nginx tls 1.3 Ubuntu 14.04

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。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar