在Nginx启用Chacha20和ALPN

  • 内容
  • 评论
  • 相关

博客启用HTTPS也应该有一年多了,最近闲的无聊的时候F12发现自己网站的HTTP2没了(博客服务器一直是用的Nginx的mainline版本),寻思咋回事儿的时候发现谷歌从Chrome 51开始强行要求ALPN(Application Layer Protocol Negotiation,应用层协议协商)才能开HTTP2。然而搜遍谷歌给出的结果是OpenSSL 1.0.2才支持ALPN,这就搞得Server端用Ubuntu 14.04的我比较尴尬了(1.0.1版)。

当时我心里第一反应是WQNMLGB的OpenSSL......CHACHA20在实验版本才有就算了,ALPN支持也这么坑。。。。。(只是吐槽,不带恶意,毕竟这东西在开源世界还是帮了不少忙的。)

然后思来想去,反正14.04上的OpenSSL已经这个鬼样子了,我还是自己动手编译支持吧,顺便把Chacha20丢进去。

那么问题来了:ALPN和CHACHA20好处都有啥?说对了就给他

首先,上面提到了,ALPN对后面版本的Chrome来说是开启HTTP2协议的必要条件。HTTP2对比Http 1.1做出了比较多的改动,比如Server Push,服务端根据客户端的请求推测他后面会请求的资源,然后一并推送给客户端,这样一来可以减少客户端请求次数。其次,头部压缩减少了传输体积,优化传输效率。

其次,对于CHACHA20加密,CHACHA20是一种流加密方式,并且旨在提供256位高强度的加密,对移动设备的兼容性更好(毕竟PC上有AES-NI指令集可以处理AES加密,然而手机上面并没有)。之前有一篇测试曾对比过三星移动设备使用AES和CHACHA20加密的速度的对比,在同样大小的密文解密情况下,CHACHA20的效率是AES的4倍左右。

所以说了这么多,开工开工。

(对于使用Ubuntu/Debian的同学,如果不想看下文的话,可以参考这份脚本---》链接

由于OpenSSL目前生产环境还不支持CHACHA20,因此使用LibreSSL替代。

先下载LibreSSL,这里使用2.4.1版本,然后make:

至于为啥不install,毕竟你系统里面还有其他需求OpenSSL的,万一install完出问题那就不好说了。

然后下载Nginx,这里我使用1.10.1的源代码。configure的配置来自于Nginx官方源的配置,但是去掉了GeoIP和Perl支持。

在配置之前,为了保证configure的完整性,避免报错,你可能需要安装下面几个东西:

然后configure

touch下Header File,避免被Nginx 重新编译,然后make

接下来,是make install 还是继续其他的操作,取决在你自己了。对于之前已经安装过的同学,执行make install的话会替换掉之前你安装的版本。因此这步请注意下选择。

我这里是make install替换原版本。

然后,如果你是全新安装,你需要把这份文件丢到/etc/init.d里面,然后执行下面的语句,以确保Nginx开机自动运行

最后运行 nginx -V看看?

修改你的ssl_cipher配置为下述:(这个是CloudFlare的SSL配置)

然后测试下连接。

chacha chacha2

至此大功告成。

评论

1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注