几个 HTTPS 相关的 Nginx 补丁

近两年追 Web 新特性,像 HTTP/2、TLS 1.3,刚好网站现在又是运行在 VPS 上的(而不是虚拟主机),相关组件都能自己定制。尝试过几个 Nginx、OpenSSL 相关的补丁(patch),本来想单独好好介绍一番,拖到现在,不如总结成简短一篇,聊胜于无。

这些补丁主要是有关 SPDY 和 chacha20 加密算法的。注意应当只用于测试,不要用于正式环境。

兼容 SPDY

nginx__http2_spdy.patch

SPDY 协议是 HTTP/2 的前身。Nginx 在支持 HTTP/2 后移除了 SPDY 特性。为了让一些老旧浏览器(主要是旧版 Chrome)也获得比 HTTP 1.1 更快的速度,我当时用了这个补丁。

但是注意,这个补丁可能会造成一些隐蔽的问题。比如造成 iOS QQ 内置浏览器 AJAX 失效

兼容 old chacha

openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch

openssl__1.1.0_chacha20_poly1305.patch

chacha20 是 Google 开发的流式加密算法,在嵌入式设备如手机上替代 AES,能取得更快的加解密速度。OpenSSL 支持的是正式版的 chacha20 算法。但一部分旧版 Chrome 内核(尤其是 Android 的内置浏览器)只支持草案(draft)版本的 chacha20,称为 old chacha。为 OpenSSL 打上这个补丁可以同时支持新旧两种算法。

优先使用 chacha20

nginx_auto_using_PRIORITIZE_CHACHA.patch

Chrome 客户端会判断用户硬件是否支持 AES-NI,如果不,发送的 cipher 中会将 chacha20 的 cipher(如 TLS_CHACHA20_POLY1305_SHA256)排在前。服务端可以感受这种优先顺序。一种方法是将 ssl_prefer_server_ciphers 设为 off,这样会遵守客户端顺序,但不被安全指南推荐,因为在很多其他旧版浏览器中会损失安全性。因而通常要开启 ssl_prefer_server_ciphers,这个补丁在这种场景下还能优先根据客户端顺序使用(或不使用)chacha20 系列 cipher。注意对 Firefox 无效。

这个补丁是给 Nginx 的。我看了源码,很简单,是利用了新版 Nginx 本身的特性。我还用过另一种版本,给 OpenSSL 的补丁,一时半会翻不到,也不是那么推荐,就不列出了。

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/487/

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情