缘起
早就想写这篇推荐大家用 LibreSSL 取代 OpenSSL 的文章,总算能够如愿。
2016 年 3 月初 OpenSSL 再次爆出与 2014 年的心脏出血(Heartbleed)同样严重的新漏洞——溺亡(DROWN)!在获悉这一消息的时候第一时间我去看 LibreSSL 有没有受影响,正如所料——没有(见下图)!这让我觉得 LibreSSL 取代 OpenSSL 更加必要。
关于 DROWN 溺亡漏洞如果还没了解过,可以参考:
LibresSSL 是什么
大家可能对 LibreSSL 不够熟悉,但对它的收藏夹图标(favicon)恐怕会相当熟悉。 你没看错,就是 OpenSSL 心脏出血漏洞的图标。它是 OpenBSD 开发者在 OpenSSL 爆出心脏出血漏洞之后 fork 的一个分支,旨在提供一个比 OpenSSL 更安全的替代品。 OpenBSD 是一个以安全著称的操作系统,LibreSSL 遵循其他 OpenBSD 项目的安全指导原则。
LibreSSL 与 OpenSSL 都是和传输层安全(TLS,Transport Layer Security)协议的开源实现,如需了解 TLS 可参见其维基词条或自行搜索。
字面上看,LibreSSL 有两种断词方式:
- Libre-SSL,Libre 来自拉丁语,意为“自由”,大家应该并不陌生,因为 LibreOffice 已经事实上取代了 OpenOffice,没准 LibreSSL 也会有这一天。
- Lib-Re-SSL,即重新实现的 libssl。
LibreSSL 更安全吗
当然。
如上所述,OpenBSD 当初创立这个项目就是为了能够避免再出现像 Heartbleed 这样的严重漏洞。 而它不受 DROWN 影响也说明了它的努力没有白费,参见 LibreSSL 不受 DROWN 攻击影响。
如果去看 LibreSSL 的 Release Note,会发现有不少 OpenSSL 的漏洞对于 LibreSSL 根本不存在,比如 2.1.4 的 Release Note,见下图:
红线所标的标题下的 CVE 分别在 LibreSSL 早期版修复或者对于 LibreSSL 根本不存在。
另外还可以参考 FreeBSD wiki 上的一项对比:
很明显,LibreSSL 的漏洞数与严重程度要比 OpenSSL 少的多、轻的多。
能够取代 OpenSSL 吗
要分情况。
有些发行版已经将原有的 OpenSSL 替换为 LibreSSL 了,知名的有:
在以上这些系统中应该除了实测必须要用 OpenSSL 软件外,应该都可以用 LibreSSL 取代 OpenSSL。
而对于其他大多数还没有将系统自带的 OpenSSL 替换为 LibreSSL 的会麻烦一些,并且也可能做不到彻底替换。只是对于编译安装的软件,可以尽量用 LibreSSL 取代 OpenSSL。
编译示例
以下示例的参考系统为 CentOS 7 和 Ubuntu 16,分别作为 RedHat 系、Debian 系发行版的代表。通常网站的 HTTPS 证书配置在 Nginx 或 HaProxy 上,因此编译二者时用 LibreSSL 取代 OpenSSL 对于网站安全性的价值更大一些,下文就以它们为例。
删掉 OpenSSL 开发包
注意,要删掉的是开发包,换句话说,以 -devel
或者 -dev
结尾的,不要把基本包也删了。
- CentOS 7:
yum erase openssl-devel
可能会删掉mysql-devel
等开发包,不要在已经使用的机器上做测试。 - Ubuntu 16:
apt remove libssl-dev
不要在已经使用的机器上做测试。
编译安装 LibreSSL
确保已安装 gcc、wget、make,如果未安装请分别按以下方式安装:
- CentOS 7:
yum install -y gcc wget
- Ubuntu 16:
apt install -y gcc make
编译安装 LibreSSL:
wget https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.4.tar.gz
tar xvf libressl-2.5.4.tar.gz
cd libressl-2.5.4
./configure --prefix=/usr/local
make
make install
确保 /usr/local/lib 已经在 ld.so.conf 中或者 ld.so.conf.d/*.conf 中。如果未在可通过 echo /usr/local/lib > /etc/ld.so.conf.d/local.conf
来添加。 然后更新缓存,并查看 libressl 的 libssl.so 版本
ldconfig
ldconfig -v | fgrep libssl
主版本号至少两位数,例如
libssl.so.43 -> libssl.so.43.0.2
这个是 LibreSSL 的,主版本号比较小的是系统自带的。
编译安装 Nginx
确保 pcre、zlib 的开发库已安装,如果未安装请分别按以下方式安装:
- CentOS 7:
yum install -y pcre-devel zlib-devel
- Ubuntu 16:
apt install -y zlib1g-dev libpcre3-dev
编译安装 Nginx(当前最新稳定版为 1.12.0):
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar xvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --with-http_ssl_module
make
make install
验证:ldd /usr/local/nginx/sbin/nginx | fgrep ssl
的输出应该是这样的:
libssl.so.43 => /usr/local/lib/libssl.so.43 (0x00007f4fc5684000)
编译安装 HaProxy
需要使用 2.4.5 版 LibreSSL,目前最新稳定版的 LibreSSL 与目前最新稳定版的 HaProxy 不兼容。
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.4.5.tar.gz
tar xvf libressl-2.4.5.tar.gz
cd libressl-2.4.5/
./configure --prefix=/usr/local
make
make install
ldconfig
编译安装 HaProxy(目前最新稳定版为 1.7.5):
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz
tar xvf haproxy-1.7.5.tar.gz
cd haproxy-1.7.5
make TARGET=linux \
USE_ZLIB=1 \
USE_PCRE=1 \
USE_OPENSSL=1 \
SSL_INC=/usr/local/include \
SSL_LIB=/usr/local/lib
make install
验证:ldd /usr/local/sbin/haproxy | fgrep ssl
应该输出:
libssl.so.39 => /usr/local/lib/libssl.so.39 (0x00007fd34408f000)
存在问题
有些软件可能用了兼容性不好的 OpenSSL API,需要实测下用 LibreSSL 取代后的兼容性如何,比如 HaProxy 与 LibreSSL 2.4.5 兼容,但是与目前最新版 2.5.4 一起编译会有问题。
未来展望
从 LibreSSL 与 OpenSSL 安全漏洞数量及严重程度的对比来看,LibreSSL 要安全很多,从目前来看也应该用 LibreSSL 来取代 OpenSSL。
但是与 OpenSSL 一样,LibreSSL 也是用 C 语言开发的,而由于语言本身的局限性,C 语言无法为内存安全提供良好的保障。可以说像 TLS 支持这样的重视安全且用于安全领域的底层库用 C 语言开发并不适合。目前来看,对于这一领域的首选开发语言当属 Rust,并且已经有一些进展,比如 Rust TLS ,当然距离成熟稳定乃至流行起来还有很多路要走。
相关推荐
适合入门openssl的同学,自己去买的,很清晰
osx-ca-certs(以前是openssl-osx-ca(和libressl-osx-ca)) 一个简单的工具和脚本,旨在由launchd(8)定期运行,以将openssl样式的CA pem与OSX钥匙串中的证书同步。 原来的名称现在用词不当,因为该软件将管理在...
**XAMPP与OpenSSL** XAMPP(Cross-Platform Apache, MySQL, PHP, Perl)是一个流行的开源开发环境,用于在本地计算机上搭建Web服务器,便于进行PHP编程、数据库管理和服务器测试。它包含了Apache服务器、MySQL...
已知该引擎可与OpenSSL或LibreSSL的现有版本一起使用,而对服务器源代码的更改却很少。常问问题问:开销是多少? 几乎没有。 一般而言,私钥操作比进程间通信的开销重得多。 在运行于Core i7 @ 2.4GHzLinux VM...
《OpenSSL与网络信息安全——完整版》是一本深入探讨OpenSSL及其在网络信息安全中应用的书籍。作者王志海、童新海和沈寒辉通过本书,详细阐述了OpenSSL的基础知识、内部结构以及相关的安全指令,旨在帮助读者理解和...
libressl的API与OpenSSL高度兼容,因此开发者可以相对轻松地从OpenSSL迁移至libressl。 **libressl-2.7.4特性** - **安全性**:libressl-2.7.4修复了多个安全漏洞,确保了在使用Python3进行网络通信时的数据安全。...
"心脏出血"漏洞,全称为OpenSSL心脏出血(Heartbleed Bug),是2014年发现的一个严重安全漏洞,影响了广泛使用的OpenSSL库。这个漏洞源于OpenSSL的TLS(传输层安全)协议实现中的一个缓冲区溢出错误,允许攻击者在...
———————————————— 版权声明:本文为CSDN博主「沧海一笑-dj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...
`openssl-devel` 是OpenSSL的开发库,包含了头文件和静态链接库,用于编译和链接到OpenSSL功能的应用程序。开发人员在编写需要使用OpenSSL的软件时,需要安装这个包,以便在编译时可以正确地引用OpenSSL的函数和结构...
在OpenSSL的历史中,曾发生过著名的“心脏出血”(Heartbleed)漏洞,这是一次严重的影响了全球数百万服务器的网络安全事件。自那以后,OpenSSL的维护团队更加注重安全性,定期发布安全补丁来解决新发现的问题。...
8. **心脏出血漏洞**:OpenSSL历史上曾因"心脏出血"漏洞(Heartbleed)而引起广泛关注,该漏洞影响了大量服务器,可能导致私钥泄漏。1.1.1a版本修复了这一问题,增强了安全性。 9. **安全性更新**:使用OpenSSL时,...
在这个场景中,我们关注的是 OpenSSL 的特定版本——1.1.1b,它于2019年2月26日发布。 Windows 用户通常在处理 SSL/TLS 功能时会遇到一些挑战,尤其是对于不熟悉编译源代码的初学者而言。GitHub 上的 OpenSSL 源...
定期检查更新,及时修复任何已知的安全漏洞,例如著名的“心脏出血”漏洞(Heartbleed)。1.1.1g是一个安全版本,但仍然建议关注官方发布的更新公告。 7. **编译自定义配置** 对于有特殊需求的开发者,可以自定义...
**OpenSSL:安全套接字层库** OpenSSL是一个开源项目,它提供了强大的安全套接字层(SSL)和传输层安全(TLS)协议实现,同时也包含了一系列加密算法、常用的证书处理工具以及丰富的SSL/TLS应用程序。在Linux系统中...
OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起"心脏出血"(Heartbleed)攻击。据分析,Windows上有大量软件使用了存在漏洞的OpenSSL代码库,可能被黑客攻击抓取用户电脑上的内存数据。
标题中的"openssl-1.0.2u + openssl-1.0.2k"指的是OpenSSL库的两个不同版本,1.0.2u和1.0.2k。OpenSSL是一个开源项目,提供安全套接层(SSL)和传输层安全(TLS)协议的实现,用于加密通信,确保网络数据传输的安全...
在您提供的描述中提到的是 OpenSSL 的一个特定版本——OpenSSL_1_1_0f。这个版本是 OpenSSL 的一个重要里程碑,它发布于2017年9月,是1.1.0系列的一部分。OpenSSL 1.1.0引入了许多改进和新特性,包括性能优化、API ...
这里我们关注的是“openssl”和“openssl-devel”这两个关键组件,它们是实现安全套接字层(SSL)和传输层安全(TLS)协议的基础。SSL/TLS协议用于加密网络通信,确保数据在传输过程中不被窃取或篡改。 **openssl**...
"心脏出血"(Heartbleed)是2014年被发现的一个严重安全漏洞,它影响了OpenSSL库,这是一个广泛用于加密网络通信的开源软件。这个漏洞在TLS(传输层安全)协议的实现中存在,称为CVE-2014-0160。在Heartbleed出现时...
标题提到的是 "openssl已编译,3.0.3",这意味着我们正在讨论的是OpenSSL库的特定版本——3.0.3,这是一个已经过编译的版本,可以直接在系统上安装和使用。 OpenSSL 3.0.3 版本可能包含了一些重要的更新和修复,...