Phoenix xie

An Engineer of Plasma physics who has strayed into the education industry.

  • 主页
  • 所有文章

Phoenix xie

An Engineer of Plasma physics who has strayed into the education industry.

  • 主页
  • 所有文章

给Nginx增加ChaCha20-Poly1305加密套件

2016-03-13

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了!

  • Nginx
  • Linux
  • SSL/TLS
  • 软件基础
给Nginx增加TLS1.3的支持
利用Haproxy实现443端口的复用
© 2022 Phoenix xie
Hexo Theme Yilia by Litten