术语表

什么是 OpenSSL?负责 HTTPS 加密的库,以及如何保证它的安全

OpenSSL 是支撑 HTTPS(TLS/SSL)与加密的开源库,多数服务器经由 Web 服务器或操作系统间接使用,一个缺陷就会波及全球(Heartbleed)。讲解确认版本、避开 EOL、监控 CVE 与打补丁。

发布于 2026-06-29 更新于 2026-10-06 3 分钟阅读
本页目录

只要你在提供 HTTPS 服务,你的服务器几乎可以肯定就跑在 OpenSSL(或兼容实现)之上。你从不直接接触它,但一旦发现缺陷,就会有大量服务器受到影响。下面讲清楚这个库的作用,以及如何防御它。

它在哪里被使用

OpenSSL 棘手的地方在于,你在使用它,却从未亲自选择过它。你的应用把 TLS 委托给 Web 服务器,Web 服务器把加密委托给 OpenSSL,而那个 OpenSSL 又由操作系统附带提供,形成一层套一层的技术栈。

你的应用
↓ 委托 TLS
Web 服务器(Nginx / Apache)· 语言运行时
↓ 委托加密
OpenSSL(由操作系统附带)
OpenSSL 位于最底层。它上面的每一层都把加密委托给它,所以一个漏洞会影响所有层。

通常这很方便:加密被交给了由专家编写的共享实现。但当这个共享库出现漏洞时,使用它的每一个人都会同时受到影响。这正是「底层库的缺陷影响广泛」的含义。

OpenSSL、SSL/TLS 与证书的区别

这几个名称听起来相似,所以常被混淆,但各自的作用不同。

术语是什么例子
SSL / TLS加密连接的规则(协议)。SSL 是旧版本;如今使用的是 TLS 1.2 / 1.3HTTPS 就是用 TLS 包裹的 HTTP
OpenSSL实际执行 TLS 和加密运算的程序(库),附带一个命令行工具Nginx 和 Apache 在内部调用它
证书由证书颁发机构担保你拥有某个域名的数据。其中包含公钥Let's Encrypt 免费签发

也就是说,OpenSSL 是实现 TLS 规则的一种工具,证书是这个工具在连接时使用的数据。实现 TLS 的库还有其他几种(LibreSSL、BoringSSL、Windows Schannel 等),用哪一种取决于操作系统和软件。

影响为何如此广泛:一个 bug 曾让大量服务器的密钥面临风险

2014 年的 Heartbleed(CVE-2014-0160)源于 OpenSSL 一个很小的实现错误(未经校验就信任了对方申报的长度),它让外部人员能一点点读取服务器内存——其中可能包含私钥与会话数据。由于 OpenSSL 使用得如此广泛,全球大量服务器在同一时刻成了攻击目标(完整故事 → Heartbleed)。

教训很清楚:依赖在技术栈中越靠下,影响就越广。 所以需要关注的不只是应用直接引入的依赖——像 OpenSSL 这样运行在底层的库,在监控与打补丁上同样值得认真对待。

如何防御:避开 EOL,监控底层库

1

弄清你的技术栈使用的是哪个 OpenSSL

看不见的东西无法防御。盘点一下你的服务器、容器基础镜像以及语言运行时各自依赖的是哪个 OpenSSL(发行版本线与具体版本)。

2

不要运行已停止支持(EOL)的版本

一旦某个发行版本线过了支持期,在其中新发现的漏洞就不会再有修复。如果继续运行 EOL 版本,漏洞即使被发现也会一直得不到修复。请规划升级到受支持的版本线上。

3

把底层库一并纳入 CVE 监控

应用依赖用 osv-scanner 之类的工具很容易追踪,但操作系统附带的 OpenSSL 却很容易被忽视。请确保底层库中的新 CVE 也能浮现出来(→ CVE 修复实操手册)。

4

一旦严重就尽快打补丁

Heartbleed 这一类的 bug,往往在披露的那一刻就遭到攻击。请让你的更新链路足够轻便,使得在严重程度需要时,底层补丁能够当天就发布上线——而不是「等到下一次例行更新」。

受支持的版本(截至 2026 年 10 月)

OpenSSL 项目在奇数年的 4 月发布长期支持(LTS)版本,并至少支持五年。3.5 之后发布的非 LTS 版本,自发布起支持 13 个月。

版本线类型支持结束
4.0常规2027 年 5 月 14 日
3.6常规2026 年 11 月 1 日
3.5LTS2030 年 4 月 8 日
3.4常规2026 年 10 月 22 日
3.0 / 1.1.1 / 1.0.2—已结束(仅有 OpenSSL Corporation 的付费扩展支持)

操作系统附带的 OpenSSL 则是另一回事。许多 Linux 发行版(包括 Red Hat 系)会在不提升版本号的情况下引入修复(向后移植)。在操作系统的支持期内,一个仍显示为 3.0 的软件包可能会继续从操作系统厂商那里收到修复。不要仅凭版本号判断「旧就有漏洞」或「新就安全」,请查看操作系统厂商的安全公告。

如何检查自己的环境

1

检查操作系统的 OpenSSL

运行 openssl version -a 查看版本。要查看软件包版本,Debian/Ubuntu 用 dpkg -l 'libssl*' openssl,Red Hat 系用 rpm -q openssl。把这个软件包版本与操作系统厂商的安全公告对照,看是否已包含修复。
2

检查应用实际使用的是哪个

有些软件会捆绑一个独立于操作系统的 OpenSSL。Nginx 用 nginx -V,Python 用 python3 -c "import ssl; print(ssl.OPENSSL_VERSION)",Node.js 用 node -p process.versions.openssl,可以看到内置的版本。
3

容器镜像也要检查

容器内的 OpenSSL 不会因为更新宿主机操作系统而改变。定期重新构建基础镜像,并对每个镜像进行漏洞扫描。
4

订阅 OpenSSL 的安全公告

对于包含严重修复的版本,openssl-announce 邮件列表会提前约一周告知发布日期和严重程度(不含细节)。有了这个预告,你就能事先为更新留出时间。

如何解读漏洞的严重程度

OpenSSL 项目把自身的漏洞分为四个等级,并据此改变修复的发布方式。

严重程度大致含义修复的发布方式
Critical影响常见配置且容易被利用(服务器内存大量泄露、私钥被盗等)立即为所有受支持版本发布修复
High风险低于 Critical 但仍然严重(不太常见的配置、仅影响客户端等)私下准备,然后为所有受支持版本发布
Moderate仅限于拒绝服务、不常用的协议等并入下一次例行发布
Low仅限命令行工具、不太可能出现的条件组合等并入下一次例行发布

像 Heartbleed 这样能从外部读取服务器内存的缺陷,符合 Critical 的定义。对于 Critical 和 High,看到预告就开始准备更新。

本站的看法:用机器监控底层库

底层库的缺陷无法靠人脑记忆来追踪。本站把自身的依赖与底层都置于机器化的 CVE 监控之下。你通过 Let's Encrypt 签发的证书,其加密在底层依然是经由 OpenSSL 家族的实现来运行的,所以把平时不会想到的底层库列出来并加以监控,是预防影响广泛的事件最直接的方法。

接下来阅读

出处(一手资料)

  • OpenSSL Library,“Release Strategy” — openssl-library.org(LTS 方针、各版本线的支持结束日期)
  • OpenSSL Library,“Security Policy” — openssl-library.org(四个严重程度等级、事先预告)
  • Red Hat,“Backporting Security Fixes” — access.redhat.com(为什么仅凭版本号无法判断是否有漏洞)
  • NIST NVD,“CVE-2014-0160” — nvd.nist.gov(Heartbleed)

FAQ

Q我从没装过 OpenSSL——我有可能仍在使用它吗?
A

几乎可以肯定是的。OpenSSL 是一个底层库,被 Web 服务器(Nginx/Apache)、操作系统以及语言运行时在内部使用。即使你从未在代码里引用它,只要你在提供 HTTPS 服务,那么底层很可能就在运行 OpenSSL(或兼容实现)。想当然地认为『我没用它』,恰恰是底层漏洞被漏掉的典型原因。

Q它和 LibreSSL 或 BoringSSL 有什么区别?
A

两者都是 OpenSSL 的分支。LibreSSL 是 OpenBSD 项目在 Heartbleed 之后为清理代码库而创建的;BoringSSL 是 Google 自用的变体。多数用户无需在它们之间做选择——远比这更重要的,是让你的平台所附带的那个实现保持在受支持的、最新的版本上。

Q我该如何查看版本或更新它?
A

在许多系统上 `openssl version` 就能显示版本,而更新则通过操作系统的包管理器、或重新构建容器的基础镜像来完成。关键在于不要继续运行已停止支持(EOL)的版本:一旦某个发行版本线进入 EOL,在其中新发现的漏洞就不会再有修复。要像追踪应用依赖那样,同样追踪你的底层依赖。

QOpenSSL 和 SSL 有什么区别?
A

SSL(如今是其后继者 TLS)是加密连接的规则(协议)的名称。OpenSSL 是实际执行这些规则的程序(库)的名称。通过 HTTPS 连接时,Web 服务器会使用 OpenSSL 之类的库来处理 TLS。

QOpenSSL 3.0 还能用吗?
A

OpenSSL 项目对 3.0 的支持已经结束(付费的扩展支持除外)。不过,Linux 发行版附带的 3.0 软件包,在该操作系统的支持期内可能会继续收到向后移植的修复。自己构建的 3.0 或捆绑在应用内部的 3.0 不会得到修复,所以请迁移到受支持的版本线,例如 3.5(LTS,支持到 2030 年 4 月)。

Q刚公布了一个 OpenSSL 漏洞,首先该做什么?
A

先确认严重程度。如果是 Critical 或 High,确认你的服务器、容器和应用是否使用受影响的 OpenSSL 版本线,并在操作系统厂商或镜像发布方提供修复后尽快更新。更新后,重启加载 OpenSSL 的进程(如 Web 服务器);否则旧的库会一直留在内存中。