将HTTPS升级到了TLSv1.3

没管住我这双手,又折腾了下,从源代码编译了下Nginx,这次升级给Nginx加上了TLS 1.3支持,并加入了PageSpeed,顺带编译进了ngx_http_google_filter_module、ngx_http_substitutions_filter_module、ngx_cache_purge这几个模块,不知道什么时候没有默认开启的http_image_filter_module也顺手给它开启了,编译过程先不说,有空整理下专门写一篇文章做下记录,先说说TLS 1.3的升级及升级过程踩到的几个坑。

前段时间就说TLS 1.3正式定稿了,作为不折腾不舒服斯基,早早就想升级试试了,但是刚出那段时间,很多浏览器都不支持,想了想就忍了。这么一放就是3个月了,趁这几天有点时间,想试试TLS 1.3,以及心心念念已久的PageSpeed,还有另外几个功能,你懂的,于是找了个吃灰的VPS,拍拍灰配置了个编译环境,前前后后花了三四个小时,终于搞定了。

因为TLS1.3还跟OpenSSL有关系,但是目前的正式稳定版还不支持TLS1.3,我用的openssl-1.1.1-pre8编译的,这部分参考了很多基于 OpenSSL 1.1.1 构建支持 TLS 1.3 的 Nginx 1.15 安装包,感谢这位博主的文章,至于PageSpeed的编译,参考了下PageSpeed官方文档,编译过程踩了不知道几个坑,但好歹最后都解决了。

先上个升级成功的图:
upgrade-https-to-tlsv1-3

Nginx编译完成之后,修改配置文件的时候,发现老是出现问题,拿了好几台闲置VPS测试都发现,同样的配置,如果只有一个vhost的时候,开启TLS1.3是没问题的,但是如果配置不一样,大概超过5个vhost,那么当前服务器下的所有Nginx vhost都会被强制fallback到TLS 1.2,不要问我,我也不知道为什么,就这么一个小问题,我花了超过1个半小时去解决,就算用Google找,也暂时没找到相关的文档,最后想,死马当活马医,就把所有的vhost的配置文件都改成了TLS 1.3的相关配置,这才成功升级到TLS1.3。

还有一个我想吐槽的是,本来想用curl在命令行下开启啰嗦模式进行调试的,一开始我发现,无论怎么请求,与服务器之间通信用的都是TLS1.2,始终是不用TLS 1.3,后来想了想,是不是版本的问题,放狗一搜,果然是。从官网来的消息看,最新版的curl已经支持TLS 1.3,但是由于发行版的版本滞后,目前主流的几个发行版自带的都不支持TLS 1.3,想用的话要自己编译,思考了下人生之后,想了想还是算了,还是下个开发版的浏览器算了。

用手头的几个浏览器试了试,目前(2018.6)几个主流浏览器的稳定版本貌似都不支持正式版的TLS1.3,但是Chrome可以通过设置开启对TLS 1.3的草稿版本的支持,至于Firefox,我是直接下载了开发版的,能正常查看到,至于Safari,平时用得上,没去试哈哈哈。