中文 BoringSSL 介绍看这位大大文章 使用 BoringSSL 优化 HTTPS 加密算法选择
imgur图片在中国大陆无法访问,本文以下图片可能无法加载。
本章老旧没有更新,但依然具备些参考价值吧。
超久之前(公元 2014),谷歌推出了 ChaCha20-Poly1305 ,chacha20 在精简指令集架构 CPU , ARM 平台上优势明显( ARMv8 之前),减少等待时间,更为省电。然而这都是之前的事情。AMRv8 已经支持 AES 指令集,也就是说目前 chacha20 的速度优势已经不太明显。
现在 openssl 和 LibreSSL 都能启用 chacha20 (使用最新版)。但是会出现只要客户端支持,无论是桌面端还是移动端都会使用 chacha20 的情况。那么就需要 BoringSSL 的 "等价加密算法组(Equal preference cipher groups)" ,可以自动使用较为适合的算法。
桌面端 Chrome
手机端 chrome
虽然前面说了目前 chacha20 速度优势已经不明显,但还是折腾玩一下。:bubble_funny: 正如官方页面所说,BoringSSL 稳定性无法保证。它也不支持 OCSP Stapling .
准备启用 BoringSSL
服务器系统 Centos7 ,
web 程序使用 nginx , 截至发文前最新版本 Nginx-1.11.8
下载 Nginx-1.11.8 来更新 nginx
wget http://nginx.org/download/nginx-1.11.8.tar.gz
tar -zxvf nginx-1.11.8.tar.gz
BoringSSL
git clone https://boringssl.googlesource.com/boringssl
安装 golang ,如果在编译 BoringSSL 时遇到缺少 golang 的问题
yum install golang cmake
编辑安装 BoringSSL .
其他详细介绍查看 https://boringssl.googlesource.com/boringssl/+/HEAD/BUILDING.md
进入 BoringSSL 目录
cd boringssl
创建 build 目录,并且进入
mkdir build && cd build
编译后返回 BoringSSL 主目录
cmake ..
make
cd ..
创建 openssl 目录,然后各种移动文件...
mkdir -p .openssl/lib && cd .openssl && ln -s ../include . && cd ../
cp build/crypto/libcrypto.a build/ssl/libssl.a .openssl/lib
cd ..
安装 Nginx
一些准备,查看 Nginx 目前版本和上一次编译参数用来备忘 (如果已经安装过 Nginx)
nginx -V
关闭 nginx 后开始重新编译安装 nginx ,注意 --with-openssl
要指向 BoringSSL 目录。
这里参数要完整一些
cd nginx-1.11.8
./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/run/nginx.pid \
--user=nginx \
--group=nginx \
--lock-path=/run/lock/subsys/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-mail_ssl_module \
--with-http_mp4_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_gunzip_module \
--with-http_image_filter_module \
--with-file-aio \
--with-http_addition_module \
--with-openssl=/root/boringssl
修改时间,避免 Nginx 再次编译 BoringSSL
touch /root/boringssl/.openssl/include/openssl/ssl.h
make
make install
nginx -V
查看版本是否被更新,然后重新配置 .conf 文件 ,加入等价加密算法
server {
listen 443 ssl http2 fastopen=3;
server_name www.set-fire.com;
ssl on;
ssl_certificate /.../fullchain.pem;
ssl_certificate_key /.../privkey.pem;
ssl_dhparam /.../dhparams.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305]:[ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305]:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:DES-CBC3-SHA;
ssl_prefer_server_ciphers on;
...
}
大概完成配置。如果我没有忘记一些步骤...
启动 nginx ,看看有没有出错:bubble_funny: