你可能听说过或者使用过 CloudFlare 和谷歌正在推动使用 ChaCha20-Poly1305 密码套件,甚至还用过CloudFlare的DNS解析服务中的 Strict SSL 的自带证书,它的配置能让用户在 Android 5 以上的系统上访问时会用 ChaCha20-Poly1305 进行加密与验证。
本篇教程就是教你让你的 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编译新的版本,并且引用新的加密套件,将在下一篇文章详解。
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
好像6.5(ovz)测试不成功。
最后部分日志:http://pastebin.com/tTPe9wZz
只是过来涨知识的...
实测你的教程在阿里云ECS上会编译失败
另外如果只是为了给Nginx加OpenSSL with Cloudflare Patch只需要静态编译进去就可以了
大大,哪里失败了,我自己用我朋友的机也试过。。。。