BoringSSL 是由谷歌开发,从 OpenSSL 中分离的一个分支。
BoringSSL 现阶段已经在 Chrome/Chromium 、 Android 等应用上。
项目主页:Google Source
镜像项目:Github
编译加密组件
依赖
sudo apt -y install build-essential make cmake golang
小贴士:是的,没错,编译需要 Go 语言支持,否则会看到以下报错。
CMake Error at CMakeLists.txt:57 (message):
Could not find Go
克隆
定位至工作目录,推荐清理掉其他无关项目。
cd /usr/local/src/
谷歌代码托管源
git clone https://boringssl.googlesource.com/boringssl
同理也可以使用 GitHub 源(推荐国内使用)
git clone https://github.com/google/boringssl.git
编译
Ninja
cd boringssl && mkdir build && cd build && cmake -GNinja .. && ninja
Make
cd boringssl && mkdir build && cd build && cmake ..
若一切顺利则会提示
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/boringssl/build
真正开始编译
make && cd ../
编译结束后复制编译好的库到目标地址
mkdir -p .openssl/lib && cd .openssl && ln -s ../include . && cd ../
cp build/crypto/libcrypto.a build/ssl/libssl.a .openssl/lib
标记已完成编译
touch /usr/local/src/boringssl/.openssl/include/openssl/ssl.h
此步骤若不进行,则在编译 NGINX 时会看到以下报错。
make -f objs/Makefile
make[1]: Entering directory '/usr/local/src/nginx-1.15.10'
cd /usr/local/src/boringssl/ \
&& if [ -f Makefile ]; then make clean; fi \
&& ./config --prefix=/usr/local/src/boringssl//.openssl no-shared no-threads \
&& make \
&& make install_sw LIBDIR=lib
/bin/sh: 3: ./config: not found
objs/Makefile:2102: recipe for target '/usr/local/src/boringssl//.openssl/include/openssl/ssl.h' failed
make[1]: *** [/usr/local/src/boringssl//.openssl/include/openssl/ssl.h] Error 127
make[1]: Leaving directory '/usr/local/src/nginx-1.15.10'
Makefile:8: recipe for target 'build' failed
make: *** [build] Error 2
至此为止, BoringSSL 编译完成。
连接 NGINX
下载源码
下载 最新主线版
cd /usr/local/src/ && wget https://nginx.org/download/nginx-1.15.12.tar.gz
解压
tar xf nginx-1.15.12.tar.gz
编译
cd nginx-1.15.12
生成 Makefile
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_perl_module=dynamic \
--with-google_perftools_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-g -O2 -specs=/usr/share/dpkg/no-pie-compile.specs -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-specs=/usr/share/dpkg/no-pie-link.specs -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
--with-openssl=/usr/local/src/boringssl/ \
--add-module=/usr/local/src/ngx_brotli
小贴士:其他组件不再赘述,请移至相关链接中查看。
make
执行编译即可。
安装
make install
小贴士:若当前有 NGINX 在工作,请先停止服务后再执行。
检查
安装成功后检查版本
nginx -V
即可看到
nginx version: nginx/1.15.12
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
built with OpenSSL 1.1.0 (compatible; BoringSSL) (running with BoringSSL)
TLS SNI support enabled
附录
相关链接
参考链接
- Building BoringSSL - BoringSSL
- NGINX + BoringSSL - Forum
- 使用 BoringSSL 优化 HTTPS 加密算法选择 - IMQUQU 博客
- Nginx 启用 BoringSSL - 南琴浪
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-04-05 22:24 PM
移动端用的版本怎么编译?
可参考官网的编译方法 https://boringssl.googlesource.com/boringssl/+/HEAD/BUILDING.md#building-for-android