ChaCha20-Poly1305 密码套件,它能让用户在 Android 5.0 以上的系统上访问时会用 ChaCha20-Poly1305 进行加密与验证。CloudFlare 和谷歌正在推动使用这个密码套件。
这里我们选用OpenSSL-1.02g来作为Nginx使用的ssl库。在支持ChaCha20-Poly1305 的同时可以使用。
给OpenSSL打补丁
因为Openssl默认是不支持ChaCha20-Poly1305的(至少官方没有标明),所以我们需要给从OpenSSL官网获取的源代码打上补丁。这里我们打上 CloudFlare 的 ChaCha20-Poly1305 patch补丁。
补丁地址
现在我们开始下载OpenSSL源码并解压,由于强迫症的关系,我喜欢把文件夹重命名一下。
cd /src wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz tar -zvxf openssl-1.0.2-latest.tar.gz mv openssl-1.0.2g openssl-1.0.2
下载好源码并解压后,我们还需要下载CloudFlare 的 ChaCha20-Poly1305 patch补丁。
cd openssl-1.0.2 #进入OpenSSL文件夹 wget https://github.com/cloudflare/sslconfig/raw/master/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102g.patch patch -p1 < openssl__chacha20_poly1305_draft_and_rfc_ossl102g.patch ./config
这里必须先做config不然编译nginx会报错,因为打补丁后需要重新配置。
编译Nginx
由于自行编译 Nginx 的时候可以指定OpenSSL的源代码文件夹,所以我们不需要而外编译OpenSSL,只需要在编译 Nginx 的时候指定就行了。
接下来我们开始下载并编译 Nginx 。
cd .. wget http://nginx.org/download/nginx-1.9.12.tar.gz tar -xzvf nginx-1.9.12.tar.gz cd nginx-1.9.12 在./configure 参数的最后加上 --with-openssl=/path/to/openssl-1.0.2 make -j8 && service nginx stop && cp ./objs/nginx /usr/sbin/nginx && service nginx start
至此,我们实现了升级Nginx和给Nginx配上支持有 ChaCha20-Poly1305 的OpenSSL。
站点配置
我们还需要给使用SSL连接的Nginx站点配置支持ChaCha20-Poly1305加密套件,这样才能真正实现我们的目的。
修改站点配置文件,把”ssl_ciphers”修改为如下内容
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
这样就OK了!