如何让Nginx快速⽀持TLS1.3协议详解
前⾔
最近在看⼀些 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 /source/old/1.1.1/openssl-1.1.
$ 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/POL
Y1305(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 /download/nginx-1.13.
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.
$ tar xvf pcre-8.
$ tar xvf nginx-1.13.
$ 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 f
server {
listen 443 ssl;
server_name www.simplehttps;
ssl_certificate /etc/letsencrypt/live/simplehttps/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/simplehttps/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;
}
}
nginx ssl证书配置关于如何申请证书,可以参考我原来的⽂章。
配置 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: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 版本,具体见下图:
Chrome 从 62 版本默认开启 TLS 1.3 的⽀持,如果是 62 以下的版本,可以进⾏下列的配置。(1)⼯具栏上打开 chrome://flags/
(2)启⽤ TLS 1.3
需要注意的是,如果服务器端⽀持的 draft 版本和浏览器⽀持的 draft 版本不⼀致,那么 HTTPS ⽹站将不能访问。
(3)重新启动浏览器
3)Firefox
Firefox 从 47 版本默认开启 TLS 1.3 的⽀持,如果是 47 以下的版本,可以进⾏下列的配置。
(1)⼯具栏上打开 about:config
(2)修改 security.tls.version.max 为 4
(3)重新启动浏览器
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论