本文介绍在Nginx上启用TLS 1.3的方法,支持Ubuntu 18.10/18.04/16.04/14.04操作平台,开启的前提是的Nginx版本必须支持TLS 1.3,至少Nginx 1.13或更高版本,同时需要使用OpenSSL 1.1.1或更高版本。想知道TLS 1.3有何不同,请查看传输层安全协议TLS 1.3 RFC 8446使互联网更快、更安全一文。
Ubuntu 18.10自带有OpenSSL 1.1.1 Ubuntu 18.10自带OpenSSL 1.1.1,Ubuntu 18.10存储库中的Nginx软件包使用OpenSSL 1.1.1,如下图:
参考:OpenSSL 1.1.1版本发布下载,增加TLS v1.3支持。
在Ubuntu 18.04/16.04/14.04上安装使用OpenSSL 1.1.1构建的Nginx 来自Ubuntu 18.04、16.04、14.04存储库的Nginx软件包不是使用OpenSSL 1.1.1构建的,可以使用OpenSSL 1.1.1手动编译Nginx,但这需要额外的时间,并且必须在新版Nginx出现时重新编译,幸运的是,我们可以通过PPA(个人包存档)安装Nginx,这个PPA开发者是Debian开发人员,也是DNS社区的重要人物,他为Debian存储库维护了许多软件包,包括Apache,BIND,MariaDB,PHP等,他也是官方certbot PPA的维护者之一,所以我在我的服务器上使用它。 如果之前添加了另一个Nginx存储库(如nginx.org),则禁用它,例如,我在/etc/apt/sources.list.d/nginx-repo.list文件中定义了另一个Nginx存储库,我只是注释掉该文件中的所有行以禁用它。 要在Ubuntu上添加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 18.04提供OpenSSL 1.1.1,如果你的Ubuntu 18.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
在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服务器块中的ssl_protocols指令即可: ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; 如果使用的是Let的加密证书,则可以在/etc/letsencrypt/options-ssl-nginx.conf文件中设置你的SSL配置,顺便说一下,certbot默认启用TLSv1,这是不安全的,你可以删除它,如果使用的是iRedMail和Nginx,则需要在/etc/nginx/templates/ssl.tmpl文件中编辑SSL配置。 保存并关闭文件,然后重新启动Nginx以使更改生效: sudo systemctl restart nginx 参考:在Ubuntu Server系统及nginx和OpenSSL服务器中开启TLS 1.3的方法。
在Web浏览器中检查TLS版本 使用Firefox新版本,重新加载你的网页,右键单击空白区域,然后在上下文菜单中选择查看页面信息,转到“安全”选项卡,你将看到正在使用TLS 1.3:
使用Google Chrome新版本,重新加载你网站上的网页,然后按Ctrl+Alt+I打开开发人员工具,转到“安全”选项卡,你将看到正在使用TLS 1.3(根据操作系统的不同,可能需要在Chrome地址栏中输入chrome://flags/#tls13-variant,并从默认设置切换为已启用以使用TLS 1.3):
是否在Cloudflare和Origin Server之间使用TLSv1.3 虽然Cloudflare在前端服务器上支持TLS 1.3,但目前在连接到源服务器时使用TLSv1.2,要检查正在使用的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服务器上下文中添加access_log指令,日志采用combined_ssl格式,注意修改your-site: access_log /var/log/nginx/your-site.access.log combined_ssl; 保存并关闭文件,然后重新加载Nginx,在访问日志文件中,将看到如下所示的内容,表示正在使用TLS 1.2: 162.158.92.17 - - [19/Mar/2019:15:22:48 +0000] TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 "GET / HTTP/1.1 注:有TLSv1.2字样。
相关主题 |