扔掉 OpenSSL,拥抱 LibreSSL——远离心脏出血与溺亡

举报
xenia 发表于 2019/12/15 14:20:15 2019/12/15
【摘要】 本文原发于我的个人博客:https://hltj.me/security/2017/05/26/libressl-instead-openssl.html。缘起早就想写这篇推荐大家用 LibreSSL 取代 OpenSSL 的文章,总算能够如愿。2016 年 3 月初 OpenSSL 再次爆出与 2014 年的心脏出血(Heartbleed)同样严重的新漏洞——溺亡(DROWN)!在获悉这一...

本文原发于我的个人博客:https://hltj.me/security/2017/05/26/libressl-instead-openssl.html

缘起

早就想写这篇推荐大家用 LibreSSL 取代 OpenSSL 的文章,总算能够如愿。

2016 年 3 月初 OpenSSL 再次爆出与 2014 年的心脏出血(Heartbleed)同样严重的新漏洞——溺亡(DROWN)!在获悉这一消息的时候第一时间我去看 LibreSSL 有没有受影响,正如所料——没有(见下图)!这让我觉得 LibreSSL 取代 OpenSSL 更加必要。


libressl_no_drown.jpg

关于 DROWN 溺亡漏洞如果还没了解过,可以参考:

LibresSSL 是什么

大家可能对 LibreSSL 不够熟悉,但对它的收藏夹图标(favicon)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,见下图:


libressl_214.png

红线所标的标题下的 CVE 分别在 LibreSSL 早期版修复或者对于 LibreSSL 根本不存在。

另外还可以参考 FreeBSD wiki 上的一项对比


cmp_at_freebsd.png

很明显,LibreSSL 的漏洞数与严重程度要比 OpenSSL 少的多、轻的多。

能够取代 OpenSSL 吗

要分情况。

有些发行版已经将原有的 OpenSSL 替换为 LibreSSL 了,知名的有:

在以上这些系统中应该除了实测必须要用 OpenSSL 软件外,应该都可以用 LibreSSL 取代 OpenSSL。

而对于其他大多数还没有将系统自带的 OpenSSL 替换为 LibreSSL 的会麻烦一些,并且也可能做不到彻底替换。只是对于编译安装的软件,可以尽量用 LibreSSL 取代 OpenSSL。

编译示例

以下示例的参考系统为 CentOS 7 和 Ubuntu 16,分别作为 RedHat 系、Debian 系发行版的代表。通常网站的 HTTPS 证书配置在 Nginx 或 HaProxy 上,因此编译二者时用 LibreSSL 取代 OpenSSL 对于网站安全性的价值更大一些,下文就以它们为例。

删掉 OpenSSL 开发包

1576390258243185.png

1576390342378928.png

1576390342207036.png

1576390342821009.png

存在问题

有些软件可能用了兼容性不好的 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 ,当然距离成熟稳定乃至流行起来还有很多路要走。


本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF9458C00001FEC41AB3AB802AF0


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。