抛弃 OpenSSL 使用 LibreSSL 编译 NGINX

分类:Linux 评论: 0

LibreSSLOpenBSDHeartBleed (心脏出血)事件后从 OpenSSL 中分离出来的分支,旨在提供一个更安全的替代品。

OpenBSD 是一个以安全著称的操作系统,LibreSSL 遵循其他 OpenBSD 项目的安全指导原则。

前言

LibreSSL 与 OpenSSL 都是和传输层安全(TLS,Transport Layer Security)协议的开源实现,如需了解 TLS 可参见其维基百科词条

安全性

关于 LibreSSL 与 OpenSSL 的安全性对比,引用 FreeBSD 的百科

LibreSSL (and OpenSSL) Security Vulnerabilities

Advisories prior to the initial release of LibreSSL (portable) are not included.

Severity LibreSSL OpenSSL
Critical+
High 0 5
Medium* 16 31
Low 7 12
Total 19 36

* NVD Medium + OpenSSL Moderate

+ OpenSSL added Critical level in revised severity rating 2015-09-28

从数量上来看 LibreSSL 比 OpenSSL 确实安全,但是没有绝对的安全,因此选择请根据情况进行选择,并且部分软件无法使用 LibreSSL 编译使用。

部分 UNIX/Linux 发行版已经将系统内 OpenSSL 替换为 LibreSSL 。

构建 LibreSSL

依赖

# apt -y install build-essential

下载

定位至工作目录,下载源码包。

# cd /usr/local/src

清理掉多余源码,保持工作区整洁。

# wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.9.1.tar.gz

解压

# tar xf libressl-2.9.1.tar.gz

编译

# cd libressl-2.9.1 && ./configure && make

小贴士:若是不准备替换系统加密组件,仅仅替换 NGINX 中的组件,解压后无需进行编译。

构建 NGINX

下载源码

# wget https://nginx.org/download/nginx-1.16.0.tar.gz

解压

# tar xf nginx-1.16.0.tar.gz

编译

# cd nginx-1.16.0

生成 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-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/libressl/

小贴士:其他组件及可能遇到的报错不再赘述,请移至相关链接中查看。

# make

执行编译即可。

安装

# make install

小贴士:若当前有 NGINX 在工作,请先停止服务后再执行。

检查

安装成功后检查版本

# nginx -V

即可看到

nginx version: nginx/1.16.0
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) 
built with LibreSSL 2.9.1
TLS SNI support enabled
configure arguments: --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-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/libressl/

附录

相关链接

参考链接

回复