试玩 nginx mainline 1.13 的 TLSv1.3

栏目: 服务器 · 发布时间: 8年前

内容简介:试玩 nginx mainline 1.13 的 TLSv1.3

大晚上的刷推发现 nginx 出了新的大版本更新( https://twitter.com/nginxorg/status/856896480497385473 ),一看 TLSv1.3 support,顿时吓清醒了,为啥这么厉害的特性官方博客都没一篇说明的(关于 TLS 1.3 的介绍建议阅读微信的 基于TLS1.3的微信安全通信协议mmtls介绍 ),后来发现原来1.11.x 的时候就偷偷加入的支持然而没有告诉你,我也是十分的无语。仔细看了一下 ngx_http_ssl_module 的文档:

The TLSv1.3 parameter (1.13.0) works only when OpenSSL 1.1.1 built with TLSv1.3 support is used.

OpenSSL 1.1.1,Arch 半天都没敢上1.1.0你跟我说1.1.1,去 OpenSSL 官网一看甚至还没 Release,感觉确实是太 bleed blade 了不适合拿来用只适合拿来玩。nginx.org 的预编译包的 OpenSSL 版本是跟随对应发行版主源里的版本(非 backport),而非滚动更新发行版里的 OpenSSL 是不会有大版本变动的,比如 Ubuntu 14.04 的 nginx-mainline built with OpenSSL 1.0.1f 6 Jan 2014,而 backport 源里已经有 1.0.2k  26 Jan 2017。

因为 OpenSSL 尚未正式发布1.1.1,因此先从 github 获取开发分支的源码,注意 master 分支的版本是 draft-19,这个版本编译出的 nginx 并不能兼容当前版本浏览器的 TLS1.3(实际测试 Chrome 60访问 build with master branch 的 nginx 不会启用 TLS 1.3 但是也不会出错):

git clone https://github.com/openssl/openssl.git -b tls1.3-draft-18 openssl-1.1.1-tls1.3-draft-18

获取当前版本的 nginx 编译参数(mainline 版本预编译包的编译选项是开的很全的,只手动开 --with-openssl,--with-http_ssl_module 这些参数肯定最后用着会踩坑的不是好习惯):

nginx - V 获取当前版本的编译参数,添加  --with-openssl=/path/to/openssl/source --with-openssl-opt=enable-tls1_3 make - j 进行编译但是 不要安装 ,因为 OpenSSL 1.1.1 是不稳定的版本,在此基础上编译的 nginx 不应用作长期运行,所以 不要安装。

查看编译的 nginx 参数:

./objs/nginx -V

如果看到输出信息里含有 “built with OpenSSL 1.1.1-dev” 说明至少编译是没有出错的,

修改 nginx.conf,加入 TLSv1.3 参数(实际上1.13版本更新就是更新了这个参数,之前的 nginx 不支持这个参数但是只要写了 TLSv1.2 就会启用1.3):

ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers          TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:CHACHA20:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;

建议先停止当前 nginx 服务后直接使用 ./objs/nginx -c /etc/nginx/nginx.conf 启动新编译的 nginx。

Chrome 目前也没有默认启用 TLS 1.3,修改 chrome://flags/#ssl-version-max 为 TLS 1.3 保存。

试玩 nginx mainline 1.13 的 TLSv1.3

后记:

从 gist 找到了一个通过修改官方打包脚本的一些参数给 CentOS 下 nginx 添加 ALPN 的脚本,修改了一下用在这里: https://gist.github.com/StarDuster/0d6fb37132fe64c0e7f60631e02b0f0d

rpm 打包的 SPEC 对格式非常严格,编译参数里 --with-openssl=../openssl-1.1.1-tls1.3-draft-18/ 在我手动 configure 的时候没有问题,使用 rpmbuild 的时候就提示 canonicalization unexpectedly shrank by one character 并退出拒绝打包,原因是不能有最后那个”/”,必须写成 --with-openssl=../openssl-1.1.1-tls1.3-draft-18

暂时不清楚 draft-18 具体实现了哪些特性(先坑着吧,反正没有一个性能测试 工具 支持 TLS 1.3) https://github.com/openssl/openssl/issues/963 记录了一部分人踩坑的总结,另外想编译一个 with openssl 1.1.1 的 curl 一直编不过,想使用 openssl s_client 也感觉编译比较困难,最近实在事多暂时不管了(逃)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

企业IT架构转型之道:阿里巴巴中台战略思想与架构实战

钟华 / 机械工业出版社 / 2017-4-1 / 79

在当今整个中国社会都处于互联网转型的浪潮中,不管是政府职能单位、业务规模庞大的央企,还是面临最激烈竞争的零售行业都处于一个重要的转折点,这个转折对企业业务模式带来了冲击,当然也给企业的信息中心部门带来了挑战:如何构建IT系统架构更好地满足互联网时代下企业业务发展的需要。阿里巴巴的共享服务理念以及企业级互联网架构建设的思路,给这些企业带来了不少新的思路,这也是我最终决定写这本书的最主要原因。本书从阿......一起来看看 《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器