• 为论坛使用 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
    PCchrome选择的算法.png

    手机端 chrome
    0_1484282433060_Screenshot_2017-01-13-12-34-38.jpeg

    虽然前面说了目前 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:

    当你凝视柱子的时候,柱子也在注视着你