您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

让Nginx快速支持TLS1.3协议

时间:2020-10-12 12:23:48  来源:  作者:

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

几个基本观点需要牢记。

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。

说明:如果编译错误,可以参考 issues 解决

安装完成后,可以使用命令行工具了解相关 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 supportedCompression: NONEExpansion: NONENo ALPN negotiatedEarly 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协议

 

234392-be0533bc8c71405c.png

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

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

(2)启用 TLS 1.3

让Nginx快速支持TLS1.3协议

 

Chrome 启用 TLS 1.3

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

(3)重新启动浏览器

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

让Nginx快速支持TLS1.3协议

 

chrome测试

3)Firefox

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

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

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

(3)重新启动浏览器

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


作者:虞大胆的叽叽喳喳
链接:https://www.jianshu.com/p/aa3f7c4d3a10
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



Tags:TLS1.3协议   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近在看一些 TLS 协议 1.3 版本的相关知识,所以想分享一些信息,本文是第一篇,没有太多的理论细节,主要说下如何在 Nginx 上快速部署一个支持 TLS 1.3 协议版本的网站。几个基本...【详细内容】
2020-10-12  Tags: TLS1.3协议  点击:(127)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条