
知名密码学与 TLS 领域的核心库 OpenSSL 4.0.2 正式发布。这是 4.0 系列的第二个维护与安全更新,官方定义为安全补丁版本,已修复 CVE 的最高严重性为「中等」。本次没有新增特性,重点主要在 QUIC、CMS、CMP、DTLS 和 AEAD 加密路径的安全修复和行为收紧上。
OpenSSL 4.0.2 主要更新
QUIC 与 DTLS 内存安全修复
集中修复了多项可触发拒绝服务的网络协议缺陷:
- QUIC 服务端:修复了处理
INITIAL数据包时,可能触发双重释放的问题:此前通道创建失败可能破坏堆内存,导致服务进程终止。 - 连接队列与 ACK 包管理:为 QUIC 服务端入站通道队列增加了约束,避免指向未知连接 ID 的大量
INITIAL包持续堆积占用内存;修复了仅含 ACK 的数据包元数据长期滞留,可能耗尽连接内存的问题。 - DTLS 缓冲逻辑:修复了握手期间接收未来 epoch 的 DTLS 记录时,缓存占用远高于记录本身大小的问题。攻击者只需要少量流量,就能对端点造成内存压力。
CMS、CMP 与 OCSP 处理加固
证书和消息处理链路也是本次修复的重点方向:
- CMS 解密:修复了 CMS 密钥解包流程中的 8 字节堆缓冲区溢出漏洞。受害端在调用
CMS_decrypt()解密特制消息时,可能发生堆损坏并触发拒绝服务。 - CMP 服务端与客户端:修复了伪造
protectionAlg参数导致的无效指针解引用问题,以及不可信 Sender DN 被当作格式字符串使用的缺陷:后者可能让恶意或被拦截的 CMP 端点触发客户端崩溃。 - extraCerts 缓存:修复了 CMP 服务端长期复用同一个
OSSL_CMP_CTX时,可能因恶意请求不断累积附加证书,导致的无限缓存增长问题。 - OCSP 响应校验:修复了客户端启用 OCSP 响应校验后,恶意 TLS 服务端可通过空响应条目在每次握手中造成内存泄漏的问题。
AEAD 空密文验证行为修正
- 在
EVP_Cipher()单次调用路径下,ChaCha20-Poly1305和AES-OCB解密空密文时,可能在未校验认证标签的情况下直接返回成功。若应用依赖该调用完成标签校验,就可能接受伪造消息。OpenSSL 4.0.2 已经修复该问题,并补全了 CCM 模式下 AEAD 空密文的认证标签校验逻辑。
TLS 1.3 会话票据与构建兼容性改进
- 除了安全修复外,OpenSSL 4.0.2 还将 TLS 1.3 客户端处理新会话票据时的
ticket_lifetime_hint上限限制为 7 天(604800 秒),对齐 RFC 8446 规范要求。 - 构建兼容性方面,新版本新增了 LLVM 体系下 Intel
icx编译器的汇编代码路径选择支持,并补充了OPENSSL_armcap(3)手册页。
OpenSSL 4.0.1 主要更新
CMS 与 PKCS#7 安全处理加固
- 内存安全:修复了
PKCS7_verify()中的堆使用后释放问题,以及 CMS 基于密码的解密路径可能出现的越界读取和空指针解引用。 - 消息真实性:修复了 CMS
AuthEnvelopedData处理逻辑可能接受伪造消息的问题,并补上了 AES-GCM-SIV 与 AES-SIV 在空消息场景下的标签处理错误。 - 抗侧信道:修复了
CMS_decrypt()与PKCS7_decrypt()在处理多个RecipientInfo时,存在的 Bleichenbacher 预言机漏洞,避免攻击者通过返回错误的差异推测 RSA PKCS#1 v1.5 的解密信息。
QUIC、OCSP 与证书验证修复
在网络服务与证书验证路径上,OpenSSL 4.0.1 修了多处可能导致进程崩溃或资源耗尽的问题:
- QUIC 侧,
PATH_CHALLENGE处理器的无界内存增长、服务器处理初始数据包时的空指针解引用都已修复。 - OCSP 侧,修复了装订响应检查中的双重释放,以及启用 OCSP 检查时,证书验证路径里的空指针解引用。
- ASN.1 方面,多字节字符串转换触发的堆缓冲区溢出、内容解析时的堆缓冲区过读,以及
X509_VERIFY_PARAM_set1_email()的潜在越界读取都补上了。 - CMP
rootCaKeyUpdate中因cert/issuer拼写错误导致的信任锚替换问题、FFC-DH 对端验证时直接使用攻击者提供的q参数的问题,都在本次的修复范围。
密码算法与 PKCS#12 行为修正
在算法实现上,4.0.1 修了两个问题:
- 通过
EVP_Cipher()路径调用 AES-OCB 时会忽略 IV。 - 包含 PBMAC1 的 PKCS#12 文件可接受过短的 HMAC 密钥。
修复 4.0.0 引入的命令行回归
除了安全漏洞,4.0.1 还修复了两个 4.0.0 版本带进来的命令行回归问题:
- 使用
openssl pkey加密私钥并交互式输入密码时,命令不会再崩溃。 openssl s_client -adv在单次read()调用读到 16384 字节输入时,不会再提前终止会话。
OpenSSL 4.0 主要更新
全新协议与密码学特性支持
OpenSSL 4.0 最重要的新特性,是对 ECH 的原生支持——它能彻底补齐 TLS 握手阶段的隐私短板,避免 SNI 信息明文泄露带来的风险。
- 国密标准方面:新增了基于 RFC 8998 规范的 SM2 TLS 套件与配套签名能力,补齐了国内合规场景的原生支持。
- 密钥派生能力上:新增 SNMP KDF 与 SRTP KDF 的原生支持,无需再依赖第三方扩展实现。
- 算法层面:新增 cSHAKE 可扩展输出函数与
ML-DSA-MU后量子签名摘要算法,提前适配后量子密码迁移需求。 - 兼容性上:为 TLS 1.2 环境新增了协商式 FFDHE 密钥交换机制,在老旧环境中也能实现更安全的密钥协商。
破坏性变更与冗余代码移除
为了给架构彻底减重,4.0 版本带来了多项不可逆的破坏性变更。最核心的 2 项是:
- 彻底砍掉了对 SSLv3、SSLv2 Client Hello 的支持,彻底告别早已被行业废弃的不安全协议;
- 全面废弃了沿用多年的传统硬件加速(Engine)机制。
针对开发者,以下 API 与配置改变需要重点关注:
| 变更模块 | 具体变化与替换方案 |
|---|---|
| 命令行工具 | c_rehash脚本正式移除,功能全面整合至原生指令openssl rehash |
| 曲线配置 | 编译阶段默认禁用了已废弃的 TLS 椭圆曲线与显式 EC 曲线,特殊需求需在配置阶段手动重新启用 |
| 数据类型 | ASN1_STRING重构为不透明类型(Opaque),多个 X.509 相关 API 强制追加了const修饰符 |
| 时间校验 | 旧版证书时间对比函数正式弃用,官方要求统一替换为X509_check_certificate_times() |
FIPS 验证逻辑与底层机制强化
对于有强合规需求的 FIPS 用户,新版本优化了模块自检流程。在执行 FIPS 模块安装时,新增延后自检机制,可将性能损耗推迟至模块实际调用阶段。
openssl fipsinstall -defer_tests
底层安全层面,4.0 分支的验证逻辑全面收紧:
- 调用 FIPS 提供程序的
PKCS5_PBKDF2_HMAC时,系统将强制执行下界校验,杜绝弱参数风险; - 证书校验链路新增了更严格的 AKID 与 CRL(证书吊销列表)验证流程,进一步压缩证书伪造的空间。
- 核心库
libcrypto也完成了底层清理:不再通过atexit()挂载全局清理任务,OPENSSL_cleanup()改为通过全局析构函数触发,或根据系统环境默认不执行。
版本演进与升级建议
对于体量庞大的下游生态来说,OpenSSL 4.0 是一次彻底的架构跨越。它彻底终止了对老旧生态的兼容性妥协,所有深度依赖旧版 Engine 机制、废弃协议的遗留项目,升级前都必须完成对应的代码重构。
官方也在产品路线图中划清楚了版本定位:4.0 为前沿特性分支,面向需要新能力的场景;当前的 LTS 长期支持版本仍为 OpenSSL 3.5,生产环境应优先选择 LTS 分支。















最新评论
有多亮,是blingbling的吗🤣
这个网站眼前一亮
不要装,千万不要装,无法自定义鼠标指针,主题和壁纸需要重新设置,但是鼠标指针完全被像素版大白指针替代,无法更改。
鼠标指针也没了qwq