为论坛使用 BoringSSL (Nginx + BoringSSL)的流程记录
-
中文 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: