云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu 18.04/16.04及Nginx上启用TLS 1.3的方法

在Ubuntu 18.04/16.04及Nginx上启用TLS 1.3的方法

2019-03-19 15:42:33作者:戴进稿源:云网牛站

本文介绍在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,如下图:

在Ubuntu 18.04/16.04及Nginx上启用TLS 1.3的方法

参考: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:

在Ubuntu 18.04/16.04及Nginx上启用TLS 1.3的方法

使用Google Chrome新版本,重新加载你网站上的网页,然后按Ctrl+Alt+I打开开发人员工具,转到“安全”选项卡,你将看到正在使用TLS 1.3(根据操作系统的不同,可能需要在Chrome地址栏中输入chrome://flags/#tls13-variant,并从默认设置切换为已启用以使用TLS 1.3):

在Ubuntu 18.04/16.04及Nginx上启用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字样。

 

相关主题

Firefox已逐渐开始启用TLS 1.3支持(附带启用指南)

精选文章
热门文章