当前位置: 首页 > 工具软件 > BoringSSL > 使用案例 >

编译boringssl

谷梁翰飞
2023-12-01

https://imququ.com/post/optimize-ssl-ciphers-with-boringssl.html

首先,获取编译所需的 Nginx 和 BoringSSL 源码,Nginx 从 1.7.4 开始支持 BoringSSL,这里我直接使用最新版:

BASHwget http://nginx.org/download/nginx-1.9.6.tar.gz
tar xzf nginx-1.9.6.tar.gz

git clone https://boringssl.googlesource.com/boringssl

现在,当前目录下应该有这两个子目录:

boringssl/
nginx-1.9.6/

确认无误后,还要做一些准备工作:

BASH# 安装编译 BoringSSL 所需的 Golang
sudo apt-get install golang

# 安装编译 Nginx 所需的工具和依赖库
sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev

# 忽略编译过程中的 Warning(不加这个,编到一半会因为 Warning 太多无法继续)
export CFLAGS="-Wno-error"

编译 BoringSSL:

BASH# 进入 BoringSSL 源码根目录
cd boringssl

# 创建 build 目录并编译,完成后回到 BoringSSL 源码根目录
mkdir build && cd build && 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 了:

BASH# 进入 Nginx 源码根目录
cd nginx-1.9.6

# 指定使用 BoringSSL 作为 SSL 库
./configure --with-openssl=../boringssl --with-http_v2_module --with-http_ssl_module

# 修改时间,避免 Nginx 再次编译 BoringSSL
touch ../boringssl/.openssl/include/openssl/ssl.h

touch 后可以开始 make 和 make install 了。这期间可能还会遇到这样一个报错:

'SSL_R_BLOCK_CIPHER_PAD_IS_WRONG' undeclared

这是因为 BoringSSL 删掉了这个变量。找到报错文件 src/event/ngx_event_openssl.c 中对应的位置:

    || n == SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                  /*  129 */

删掉这一行,或者加个判断都可以解决问题:

BASH#ifdef SSL_R_BLOCK_CIPHER_PAD_IS_WRONG
    || n == SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                  /*  129 */
#endif

其他应该没什么问题了。make install 之前记得先停掉 nginx 服务,不然很可能需要手动杀死之前的 nginx 进程。一切妥当后,参考前文修改 ssl_ciphers 并启动服务,搞定收工!

 类似资料: