OpenSSL的ChaCha20-Poly1305密码套件
in Tutorial with 4 comments
OpenSSL的ChaCha20-Poly1305密码套件
in Tutorial with 4 comments

你可能听说过或者使用过 CloudFlare 和谷歌正在推动使用 ChaCha20-Poly1305 密码套件,甚至还用过CloudFlare的DNS解析服务中的 Strict SSL 的自带证书,它的配置能让用户在 Android 5 以上的系统上访问时会用 ChaCha20-Poly1305 进行加密与验证。

393138937795273754.jpg

本篇教程就是教你让你的 OpenSSL 支持 ChaCha20-Poly1305,同时这篇教程也教会你如何更新 OpenSSL,也算是本人的一篇备忘笔记吧,当然这个教程已经在本站linpx.com实践并应用了。

教程是在CentOS 7下实践的,6的话还未实践过

如果想要在6下实践成功需要升级GCC4.7以上版本和binutils 2.22以上版本···

所以Let's go,我们需要更新 OpenSSL 为最新的版本,下载源码开始编译:

cd /usr/src
wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
tar -zvxf openssl-1.0.2-latest.tar.gz
cd openssl-1.0.2g

注意事项:这里通过wget获取的openssl-1.0.2-latest.tar.gz为openssl-1.0.2g版本,所以下面的也是1.0.2g版本

完成上面后,现在我们有了1.0.2g源码可以编译OpenSSL了,但我们编译之前,需要打上 CloudFlare 的 ChaCha20-Poly1305 patch

https://github.com/cloudflare/sslconfig/tree/master/patches

这里用了 OpenSSL 1.0.2 stable 的那个Patch , openssl__chacha20_poly1305_draft_and_rfc_ossl102g.patch没试过, 但用stable 那个也没事,这里提醒一下这个坑

curl https://raw.githubusercontent.com/cloudflare/sslconfig/master/patches/openssl__chacha20_poly1305_cf.patch -o openssl__chacha20_poly1305_cf.patch
patch -p1 < openssl__chacha20_poly1305_cf.patch

接着,我们可以开始编译 OpenSSL

./config
make
make test
make install

完成编译之后,检查发现 $PATH 依然是旧版本,我们需要修复这个问题

openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013  
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
openssl version
OpenSSL 1.0.2g  1 Mar 2016  

检查是否包含了CHACHA20

openssl ciphers | grep chacha -i
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305 

至此,我已经给服务器安装最新的 OpenSSL 并且支持 ChaCha20-Poly1305 。现在只差给Nginx编译新的版本,并且引用新的加密套件,将在下一篇文章详解。

Responses
  1. 好像6.5(ovz)测试不成功。
    最后部分日志:http://pastebin.com/tTPe9wZz

    Reply
  2. 只是过来涨知识的...

    Reply
  3. 实测你的教程在阿里云ECS上会编译失败

    另外如果只是为了给Nginx加OpenSSL with Cloudflare Patch只需要静态编译进去就可以了

    Reply
    1. @ZeroClover

      大大,哪里失败了,我自己用我朋友的机也试过。。。。

      Reply