欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

如何让Nginx快速支持TLS1.3协议详解

程序员文章站 2023-09-27 17:11:01
前言 最近在看一些 tls 协议 1.3 版本的相关知识,所以想分享一些信息,本文是第一篇,没有太多的理论细节,主要说下如何在 nginx 上快速部署一个支持 tls 1...

前言

最近在看一些 tls 协议 1.3 版本的相关知识,所以想分享一些信息,本文是第一篇,没有太多的理论细节,主要说下如何在 nginx 上快速部署一个支持 tls 1.3 协议版本的网站。

tls 1.3 优势

tls 1.3 相对于之前的版本,主要有两大优势:

enhanced security: 安全性增强
improved speed:速度提升

几个基本观点需要牢记。

1)截止到现在 tls 1.3 协议仍然处于草案阶段,最新的 rfc 文档是 draft 28,对于大型系统来说,目前并不建议部署,当然对于个人网站来说,可以部署 tls 1.3 版本 。

2)tls 1.3 和 tls 1.2 版本有很大的不同,从协议消息的角度来看,两者是不兼容的,也正因为此,大型系统目前不建议采用 tls 1.3 版本。

关于这两个版本之间的差异,后续我会写文章详细描述。

3)nginx 底层使用的密码库是 openssl,也就是说是否支持 tls 1.3 版本,取决于 openssl 库。

目前 nginx 1.13 以上的版本支持 tls 1.3 版本,而 openssl 1.1.1 版本支持 tls 1.3 版本,最新的 openssl 1.1.1-pre5 支持 tls 1.3 draft 26。

这篇文章运行环境如下:

  • ubuntu 14.04.5 lts 系统
  • gcc version 4.8.4
  • nginx nginx1.13.5
  • openssl1.1.1

如果大家在具体安装的时候,遇到各类问题,可能和软件版本、系统环境有关,需要查看手册或者在线 google。

安装 openssl

了解 tls 1.3 版本,最好的工具就是 openssl,所以第一步就是安装 openssl 密码库和命令行工具。

运行如下命令:

$ cd /root 

# 下载源代码 
$ wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1-pre1.tar.gz 

$ cd openssl-1.1.1-pre1

$ grep tls1_3_version_draft_txt ./* -r
# 输出 draft 23 
./include/openssl/tls1.h:# define tls1_3_version_draft_txt "tls 1.3 (draft 23)"

$ ./config --prefix=/usr/local/openssl1.1.1 --openssldir=/usr/local/openssl1.1.1 --libdir=lib shared -wl,-r,'$(librpath)' -wl,--enable-new-dtags enable-ec_nistp_64_gcc_128 enable-tls1_3

$ make 
$ make install
  • 在这个版本中,默认已经启用 tls 1.3 ,所以不加 enable-tls1_3 参数也可以
  • openssl 命令行工具和各类包、证书文件都保存在 /usr/local/openssl1.1.1 目录下。
  • 该版本对应的 tls 1.3 版本是 draft 23。

安装完成后,可以使用命令行工具了解相关 tls 1.3 信息。

比如运行下列命令,了解该版本对应的所有密码套件:

$ ./usr/local/openssl1.1.1/bin/openssl ciphers -v tls1_3 | column -t

0x13,0x02 - tls_aes_256_gcm_sha384 tlsv1.3 kx=any au=any enc=aesgcm(256)  mac=aead
0x13,0x03 - tls_chacha20_poly1305_sha256 tlsv1.3 kx=any au=any enc=chacha20/poly1305(256) mac=aead
0x13,0x01 - tls_aes_128_gcm_sha256 tlsv1.3 kx=any au=any enc=aesgcm(128)  mac=aead

可以看出 tls 1.3 版本支持的密码套件进一步减少(增强了安全性)。

安装 nginx

nginx 支持 tls 1.3 版本,指定 openssl 库即可,运行命令如下:

$ cd /root 

$ wget http://nginx.org/download/nginx-1.13.5.tar.gz 
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz

$ tar xvf pcre-8.41.tar.gz 
$ tar xvf nginx-1.13.5.tar.gz 

$ cd nginx-1.13.5

$ ./configure \
 --prefix=/usr/local/nginx1.13.5.tls1.3 \
 --with-http_ssl_module \
 --with-pcre=../pcre-8.41 \
 --with-stream \
 --with-openssl=../openssl-1.1.1-pre1 \
 --with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128" --with-pcre

$ make 
$ make install

—with-openssl-opt 参数主要是为了配置 openssl

nginx 配置 tls 1.3 版本

$ cd /usr/local/nginx1.13.5.tls1.3
$ vim conf/nginx.conf

nginx.conf 文件配置如下:

server {
 listen  443 ssl;
 server_name www.simplehttps.com;

 ssl_certificate  /etc/letsencrypt/live/simplehttps.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/simplehttps.com/privkey.pem;
 ssl_protocols  tlsv1 tlsv1.1 tlsv1.2 tlsv1.3;

 ssl_protocols  tlsv1.1 tlsv1.2 tlsv1.3;
 ssl_prefer_server_ciphers on;

 ssl_ciphers  tls13-aes-256-gcm-sha384:tls13-chacha20-poly1305-sha256:tls13-aes-1
 28-gcm-sha256:tls13-aes-128-ccm-8-sha256;

 location / {
  root html;
  index index.html index.htm;
 }
}

关于如何申请证书,可以参考我原来的文章。

配置 tls 1.3 版本很简单,ssl_protocols 增加 tlsv1.3 即可。

运行如下命令启动 nginx:

$ ./sbin/nginx

测试 tls 1.3

使用三种方式测试网站是否支持 tls 1.3 版本。

1)openssl 命令行

运行下列命令:

$ /usr/local/openssl1.1.1/bin/openssl s_client -connect www.simplehttps.com:443 -tls1_3  

# 输出

new, tlsv1.3, cipher is tls_aes_256_gcm_sha384
server public key is 2048 bit
secure renegotiation is not supported
compression: none
expansion: none
no alpn negotiated
early data was not sent
ssl-session:
 protocol : tlsv1.3
 cipher : tls_aes_256_gcm_sha384

可见 tlsv1.3 已经成功支持。

2)chrome

目前主流的浏览器都支持 tls 1.3 版本,具体见下图:

如何让Nginx快速支持TLS1.3协议详解

chrome 从 62 版本默认开启 tls 1.3 的支持,如果是 62 以下的版本,可以进行下列的配置。

(1)工具栏上打开 chrome://flags/

(2)启用 tls 1.3

如何让Nginx快速支持TLS1.3协议详解

需要注意的是,如果服务器端支持的 draft 版本和浏览器支持的 draft 版本不一致,那么 https 网站将不能访问。

(3)重新启动浏览器

然后打开浏览器,对 https://www.simplehttps.com 进行测试。

如何让Nginx快速支持TLS1.3协议详解

3)firefox

firefox 从 47  版本默认开启 tls 1.3 的支持,如果是 47 以下的版本,可以进行下列的配置。

(1)工具栏上打开 about:config

(2)修改 security.tls.version.max 为 4

(3)重新启动浏览器

然后打开浏览器,对 https://www.simplehttps.com 进行测试。

如何让Nginx快速支持TLS1.3协议详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。