对服务器后台进行的一些改进

善良单纯的小阿板
创建时间: 2017年10月5日 庆丰五年
最后编辑: 2017年10月5日 7 年前
因为很穷,所以只能改改软件过过瘾了233333

从昨天折腾到现在,原因其实很简单,就是 nginx.org 官方预编译包的 nginx 是内置 openssl 1.0.1,不能挂载外部的 openssl,没有1.0.2用,自然就没有 http2 用,这个已经忍了好多年了——但是自己编译又太麻烦太慢,还容易跟不上更新,所以就一直拖了很久很久。直到最近接触了 openresty,简直就是见到了新大陆。本身我是不用 lua 编程的,但是还是忍不住把她称赞了一番,然后默默地不用她的 lua 功能——我需要的只是内置的 openssl 1.0.2 魔改版咯。

很简单的换成 openresty 之后,在监听里写上高贵的 http2。顺手按 MDN 的推荐,更新了加密套件,改为

ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;

瞬间就高大上了有没有。但是因为 openresty 没有像 nginx mainline 一样,支持 TLSv1.3 ,所以没有办法用最新的加密套件,也是很难受的,谁让我这么懒呢。

顺手也配了公钥钉孔和HSTS

add_header Public-Key-Pins 'pin-sha256="8accC2hwvJW7+NU9CUp4fqqXnBuTnhkCTYQDjl/iTJA="; pinsha256="Rx3OXJJs3fvWuW0Y/hiW2OXrA2xnuM4PQIhxz+SEwgI="; pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; max-age=2592000;';

add_header Strict-Transport-Security max-age=15552000;

这里关于 Ciphersuites 有一个坑要尤其注意, nginx 默认加密套件的值是

ssl_ciphers  HIGH:!aNULL:!MD5;

而根据 https://http2.github.io/http2-spec/#BadCipherSuites ,在 http2 TLSv1.2+ 的条件下,很多的套件已经被ban掉了。所以就导致,按 nginx 的默认配置,安卓上的UC浏览器会大机率出现握手失败,不能提升加密等级的情况,也就是使用无法使用的低安全性的加密方法,这就很迷,因为在桌面的 Firefox 和 Chrome,以及 微信浏览器、Android Chrome 上都能开开心心地使用高级别的套件,而只有 UC 会出现停留在低强度加密的问题。尽管这是 UC 的锅,我们还是按照 Mozilla 的推荐,改成现代加密套件(我还是对 chacha20 非常有好感的

这里必须表扬安利下新的 MDN,真的是不要太好用,关于钉孔简直是傻瓜化的指导:链接,不但有配置推荐,还有贼好用的 ssl config generator

配合着 http2,看起来简直不要太舒服233333

hsts和公钥钉孔

最后就展示下高贵的 A+ 吧,毕竟从小学毕业之后,就再也没有得过这么好的成绩了

请输入图片描述