-
如何在Ubuntu 20.04、18.04、16.04上轻松启用Nginx中的TLS 1.3
在前一篇文章中,我解释了使用OpenSSL 1.1.1编译Nginx源代码的步骤,以启用TLS 1.3协议,该协议于2018年8月正式发布。在本教程中,我将向您展示一种在Ubuntu 20.04、18.04和16.04上启用TLS 1.3的更简单方法 TLS 1.3提高了性能和安全性 就性能而言,TLS 1.2需要两次往返来建立HTTPS连接。对于TLS 1.3,只需要一次往返。TLS 1.3还支持零往返模式(0-RTT会话恢复),允许以前连接到您的网站的客户端在第一条消息上向服务器发送HTTP请求。这对移动网络或远程位置的用户有很大影响。 在安全方面,TLS 1.3取消了对旧密码套件的支持,旧密码套件负责机器人攻击等漏洞攻击。当然,这是一个过于简单的解释。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和20.04附带OpenSSL 1.1.1 OpenSSL 1.1.1包含在Ubuntu18.10和20.04存储库中,Ubuntu18.10/20.04存储库中的Nginx包是用OpenSSL 1.1.1构建的。 当Ubuntu18.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出现时,您必须重新编译。幸运的是,我们可以从个人软件包档案(PPA)中安装Nginx,Ondřej Surý是Debian开发者,也是DNS社区的重要人物。他为Debian repository维护许多软件包,包括Apache、BIND、MariaDB、PHP等。他也是官方certbot PPA的维护者之一。所以我信任他的PPA,并在我的服务器上使用它。 如果您之前添加了另一个Nginx存储库(如Nginx.org),请禁用它。例如,我在/etc/apt/sources中定义了另一个Nginx存储库。列表d/nginx回购。列表文件。我只是注释掉该文件中的所有行以禁用它。 要在Ubuntu上添加Ondřej Surý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 compute engine,则在运行上述命令时将看到以下消息。 The following packages have been kept back: libssl1.1 openssl 这是因为OpenSSL 1.1.1包与一些Google计算引擎包冲突。您需要运行以下命令来升级OpenSSL。 sudo apt dist-upgrade 在Ubuntu 20.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 要启用TLS1.3,只需添加TLSv1。3到ssl服务器块中的ssl_协议指令。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; 如果您使用的是Let's Encrypt证书,则可以在/etc/letsencrypt/options SSL nginx中设置SSL配置。conf文件。顺便说一句,certbot默认启用TLSv1,这是不安全的,您可以删除它。如果您使用的是iRedMail和Nginx,那么您需要在/etc/Nginx/templates/SSL中编辑SSL配置。tmpl文件。 保存并关闭文件。然后重新启动Nginx,使更改生效。 sudo systemctl restart nginx 在Web浏览器中检查TLS版本 使用Firefox 63或更高版本,重新加载网页,右键单击空白区域,然后在上下文菜单中选择查看页面信息。转到安全选项卡,您将看到TLS 1.3正在使用。 使用Google Chrome 70或更高版本,重新加载网站上的网页。然后按Ctrl+Alt+I打开开发者工具。转到安全选项卡,您将看到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"'; 保存并关闭文件。然后在SSL服务器上下文中添加访问日志指令。日志采用组合的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 20.04、Ubuntu 18.04和Ubuntu 16.04上启用Nginx中的TLS 1.3。您可能还想设置ModSecurity web应用程序防火墙,以保护您的网站免受黑客攻击。 如何在Debian/Ubuntu上使用Nginx设置ModSecurity 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?