OpenSSL 版本演进全解:从 NEWS.md 读懂 0.9 到 4.1 的 TLS 与密码学库发布史

发布时间:2026/9/10 1:05:31
OpenSSL 版本演进全解:从 NEWS.md 读懂 0.9 到 4.1 的 TLS 与密码学库发布史 OpenSSL 版本演进全解从 NEWS.md 读懂 0.9 到 4.1 的 TLS 与密码学库发布史【免费下载链接】opensslGeneral purpose TLS and crypto library项目地址: https://gitcode.com/GitHub_Trending/ope/openssl本文以 OpenSSL 仓库根目录的 NEWS.md 为主轴系统梳理 OpenSSL 从 0.9.x 到 4.1开发中全部版本线的功能发布、不兼容变更与 CVE 修复记录并结合 VERSION.dat、dev/NEWS-FORMAT.md 编辑规范与源码头文件交叉验证帮助你在升级、选型和安全评估时快速定位“自己用的版本修了什么、下个版本会破坏什么”。NEWS.md 在 OpenSSL 仓库中的定位NEWS.md 是一份 2544 行的发布说明总文件开篇即声明This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file.也就是说NEWS.md 提供各版本之间重大变更的简要总览逐提交级别的细节在 CHANGES.md 中。两者的分工决定了 NEWS.md 的写法高度结构化文件顶部是版本锚点目录覆盖 15 个版本线OpenSSL 4.1、4.0、3.6、3.5、3.4、3.3、3.2、3.1、3.0、1.1.1、1.1.0、1.0.2、1.0.1、1.0.0、0.9.x见 NEWS.md#L10-L24每个版本线内部条目按时间倒序排列——最新的小版本在最上面最初的功能版本在最下面安全补丁发布统一给出“最高严重级别”定调如 “The most severe CVE fixed in this release is Moderate/High/Low”CVE 编号以行内链接形式引用而全部 URL 集中放在文件末尾的链接定义区NEWS.md#L2303-L2544这是为了方便统一维护。这种“倒序 严重级别定调 尾部集中链接”的组织方式并非随意它由 dev/NEWS-FORMAT.md 明文规定3.2 版本起启用后文第五节会展开。版本线总览从 SSLeay 到 4.1 的 28 年下表汇总 NEWS.md 覆盖的全部版本线及其在文件中的位置可用于快速跳转版本线起点版本日期文件位置里程碑0.9.x0.9.1c 自 SSLeay 0.9.0b 更名而来1998-12-23NEWS.md#L1783确立 OpenSSL 名称与 ASN.1/EC/AES 基础1.0.02010-03-29NEWS.md#L1620RFC 3280 路径验证、CMS、GOST、PSK1.0.12012-03-14NEWS.md#L1607TLS 1.1/1.2、DTLS-SRTP、NPN、Heartbeat1.0.22015-01-22NEWS.md#L1428Suite B、DTLS 1.2、ALPN、SSL_CONF1.1.02016-08-25NEWS.md#L1232结构体全面不透明化、ChaCha20-Poly1305、X25519、安全等级1.1.12018-09-11NEWS.md#L1110TLS 1.3RFC 8446、新 DRBG、SHA3/EdDSA/SM 系列3.02021-09-07NEWS.md#L952提供者Provider模型、OSSL_LIB_CTX、许可改为 Apache 2.03.12023-03-14NEWS.md#L879FIPS 140-3 合规改造、性能增强3.22023-11-23NEWS.md#L755QUIC 客户端、RPK、HPKE、Argon2、证书压缩3.32024-04-09NEWS.md#L607QUIC qlog/流控 API、EVP_DigestSqueeze3.42024-10-22NEWS.md#L504复合签名算法、JITTER 熵源、Attribute Certificate3.52025-04-08NEWS.md#L436QUIC 服务端、PQCML-KEM/ML-DSA/SLH-DSA、EVP_SKEY3.62025-10-01NEWS.md#L352LMS 签名、FIPS 186-5 确定性 ECDSA、openssl configutl4.02026-04-14NEWS.md#L167ECH、SM2 混合 PQC 组、大规模不兼容清理4.1开发中NEWS.md#L29DTLS 1.3 监听器 API、e2k 架构支持一个值得注意的细节版本序列从 1.1.1 直接跳到 3.0没有 2.x。NEWS.md 在 1.0.2 时代的条目里已埋下伏笔——3.0.0 条目明确写着 “Changed our version number scheme and set the next major release to 3.0.0”NEWS.md#L1006-L1007。当前仓库的实际版本状态可以在 VERSION.dat 中确认MAJOR4、MINOR1、PATCH0、PRE_RELEASE_TAGdev即本仓库是 4.1 开发线对应 NEWS.md 中标注[under development]的 4.1 与 3.3.3 两个条目。架构转折点3.0 的 Provider 模型与 4.0 的“瘦身”读懂 NEWS.md 最有价值的部分是识别不兼容变更其中两个最大转折点分别是 3.0 和 4.0。3.0.0从 Engine 到 Provider 的彻底换轨3.0.02021-09-07是 OpenSSL 历史上规模最大的一次重构NEWS.md#L952-L1025 的关键条目包括引入 provider 机制这是“将取代 ENGINE API 与 ENGINE 实现”的新可插拔概念同一时期ENGINEAPI 被标记弃用NEWS.md#L971低层算法 API 全面弃用所有低层 MD5/SHA 摘要函数、AES/DES/RC4 等对称加密函数、DH/DSA/ECDH/ECDSA/RSA 公钥函数全部进入弃用轨道要求迁移到 EVP 接口NEWS.md#L1015-L1021旧算法被移入legacy providerCAST5、BF、IDEA、SEED、RC2、RC4、RC5、DES 等 EVP 分组密码以及 MD2、MD4、MDC2、WHIRLPOOL、RIPEMD-160 摘要新增OSSL_LIB_CTX库上下文与一系列_ex后缀函数使同一进程内可以隔离不同算法策略openssl命令行程序移除交互模式新增openssl mac、openssl kdf、openssl info子命令对应 EVP_MAC / EVP_KDF 新 API安全策略收紧安全等级 1 及以上不再信任 SHA1 签名的证书许可从 SSLeay/OpenSSL 双许可切换为 Apache License v2.0新增 KTLS内核 TLS、CMPRFC 4210/4211/6712实现与完整的 HTTP 客户端。4.0.0把弃用项一次性移除4.0.02026-04-14作为功能版本其“potentially significant or incompatible changes”清单NEWS.md#L172-L237可以视为对过去五年弃用的集中清算逐条包括移除 SSLv32015 年已弃用1.1.0 起默认禁用以及SSLv2 Client Hello支持移除 engine 支持no-engine构建选项与OPENSSL_NO_ENGINE宏恒存在移除c_rehash脚本改用openssl rehash仓库中对应实现见 apps/rehash.cRFC 8422 弃用的椭圆曲线在 TLS 中编译期默认关闭可用enable-tls-deprecated-ec重新打开显式 EC 曲线参数默认关闭用enable-ec_explicit_curves打开ASN1_STRING变为不透明类型大量 X.509 相关 API 签名加入const限定弃用X509_cmp_time()、X509_cmp_current_time()、X509_cmp_timeframe()推荐X509_check_certificate_times()移除BIO_f_reliable()、自定义EVP_CIPHER/EVP_MD/EVP_PKEY方法支持、固定 SSL/TLS 版本方法函数、ERR_get_state()等旧错误处理 APIERR_STATE恒为不透明生命周期语义变化libcrypto不再通过atexit()清理全局数据OPENSSL_cleanup()默认在全局析构函数中运行或不运行BIO_snprintf()改用 libc 的snprintf()FIPS provider 对PKCS5_PBKDF2_HMAC强制下限检查X509_V_FLAG_X509_STRICT下新增 AKID 校验、CRL 校验增强输出格式规范化十六进制 dump 宽度统一为签名 24 字节/其他 16 字节去除打印 RSA 模数等 key data 时的多余前导00:构建目标清理移除darwin-i386、darwin-ppc{,64}等 32 位 Darwin 目标。4.0.0 的新功能则包括Encrypted Client HelloECHRFC 9849设计细节见 doc/designs/ech-api.md应用层实现在 apps/ech.c 与 crypto/ech/ 之外的 ssl/ech/ 目录国密与 PQC 混合RFC 8998 的sm2sig_sm3签名、curveSM2密钥交换以及混合后量子组curveSM2MLKEM768cSHAKENIST SP 800-185、ML-DSA-MU 摘要、SNMP KDF 与 SRTP KDFopenssl fipsinstall -defer_tests支持延迟运行 FIPS 自检Windows 上支持静态/动态 VC 运行时二选一TLS 1.2 按 RFC 7919 协商 FFDHE 组。4.1开发中DTLS 1.3 与底层并发原语当前开发线 4.1 的条目虽然短NEWS.md#L29-L41但每一项都能在源码头文件中找到对应落地DTLS 1.3RFC 9147支持核心是 SSL 监听器 APISSL_new_listener()可创建 DTLS 监听器将入站数据报多路复用到按对端划分的连接再用SSL_accept_connection()逐个接受。这两个声明就在 include/openssl/ssl.h.in#L2326-L2330__owur SSL *SSL_new_listener(SSL_CTX *ctx, uint64_t flags); __owur SSL *SSL_new_listener_from(SSL *ssl, uint64_t flags); __owur SSL *SSL_accept_connection(SSL *ssl, uint64_t flags);配套的 ossl-guide-dtlsv13(7) 手册页提供使用文档新增CRYPTO_atomic_load_ptr、CRYPTO_atomic_store_ptr、CRYPTO_atomic_cmp_exch_ptr三个原子指针操作 API声明见 include/openssl/crypto.h.in#L101-L103Elbrus2000e2k架构的初步支持与 Configurations/50-e2k.conf 配置模板相互印证修复用 SHA-384/SHA-512 签名 DSA 证书的校验问题。功能版本速览每个大版本“加了什么”按 NEWS.md 的时间线各功能版本x.y.0新增能力可归纳如下。这一节按版本倒序整理便于对照升级路径。OpenSSL 3.6.02025-10-01NEWS.md#L352-L381为 PKEY 对象加入 NIST 安全类别KDF/密钥交换提供者方法支持EVP_SKEY不透明对称密钥对象并新增EVP_KDF_CTX_set_SKEY()、EVP_KDF_derive_SKEY()、EVP_PKEY_derive_SKEY()按 SP 800-208 增加 LMS 签名验证支持FIPS 与默认提供者均包含构建要求从 ANSI-C 提高到C-99移除 VxWorks 平台支持新增openssl configutl工具处理并回显 OpenSSL 配置文件FIPS 提供者增加 FIPS 186-5 确定性 ECDSA弃用EVP_PKEY_ASN1_METHOD相关函数。EVP_SKEY与EVP_DigestSqueeze等新 API 在头文件中的落点可查 include/openssl/evp.h。OpenSSL 3.5.02025-04-08NEWS.md#L436-L486 是本文件中“PQC 落地”的标志性条目req、cms、smime三个应用的默认加密从des-ede3-cbc改为aes-256-cbc默认 TLS 支持组列表改为包含并优先混合 PQC KEM 组默认 keyshares 变为 X25519MLKEM768 与 X25519新增服务端 QUICRFC 9000、第三方 QUIC 协议栈支持含 0-RTT、PQC 算法ML-KEM、ML-DSA、SLH-DSA、no-tls-deprecated-ec配置项、enable-fips-jitter配置项、CMP 集中密钥生成、EVP_SKEY 不透明对称密钥对象、多 TLS keyshares、提供者可流水线pipelining的分组加密 API所有BIO_meth_get_*()函数被弃用已知问题对SSL_accept_connection()返回对象调用SSL_accept()会报错需改用SSL_do_handshake()原 issue #27282。仓库中 QUIC 的实现位于 ssl/quic/49 个源文件QUIC 演示在 demos/quic/入门文档为 README-QUIC.md。OpenSSL 3.4.02024-10-22NEWS.md#L504-L564弃用TS_VERIFY_CTX_set_*并新增语义更清晰的TS_VERIFY_CTX_set0_*Windows 上 OPENSSLDIR/ENGINESDIR/MODULESDIR 支持运行时注册表定义FIPS 提供者中的 X25519/X448 实现标记fipsnounapprovedSHAKE-128/256 不再有默认摘要长度EVP_DigestFinal前必须先设置xoflen参数配置config_diagnostics1可让 SSL 模块配置错误直接使SSL_CTX_new()失败TLS 1.1 连接改用空 renegotiate 扩展替代空 renegotiation SCSV为 Y2038 安全弃用SSL_SESSION_get_time()等函数并改用_ex版本。新特性包括可直接 fetch 的复合签名算法如 RSA-SHA2-256、FIPS 指示器indicator支持、PKCS#12 的 PBMAC1RFC 9579、基于 jitterentropy 的 JITTER 随机熵源、req/x509应用的-not_before/-not_after选项、RFC 9150 的 TLS 1.3 纯完整性套件TLS_SHA256_SHA256/TLS_SHA384_SHA384、CMP 证书请求模板与 CRL 获取、Attribute CertificateRFC 5755初始支持、以及 P-256 使用的预计算 ECC 组初始化优化。OpenSSL 3.3.02024-04-09NEWS.md#L607-L716 是 QUIC 能力的大版本新增 qlog 跟踪、QUIC 协商空闲超时 API、QUIC 流写缓冲区查询 API、SSL_write_ex2以优化方式发送流结束 FIN声明可见 include/openssl/ssl.h.in、QUIC 对象非阻塞轮询、EVP_DigestSqueeze()SHAKE 多次不同长度挤压、CMake 导出器、EVP_PKEY_fromdata支持派生 CRT 参数、X509_STORE_get1_objects()解决多线程竞态。行为变更同样值得注意provider 的activate/soft_load配置现在必须显式取[1|yes|true|on]才生效openssl speed的 hmac 默认哈希从 md5 改为 sha256openssl crl -verify与openssl req -verify失败时退出码改为 1HTTP 客户端引入 256 行响应头限制。OpenSSL 3.2.02023-11-23NEWS.md#L755-L836 确立了现代应用最常引用的三个默认值变更默认 SSL/TLS 安全等级从 1 提升到 2x509/ca/req应用恒定输出 X.509v3 证书X.509 主题/颁发者名默认以 UTF-8 显示。新特性清单覆盖 QUIC 客户端RFC 9000多流、Ed25519ctx/Ed25519ph/Ed448phRFC 8032、确定性 ECDSARFC 6979、AES-GCM-SIVRFC 8452、Argon2 KDF 与线程池RFC 9106、HPKERFC 9180、SM4-XTS、Brainpool 曲线 TLS 1.3、TLS 裸公钥 RPKRFC 7250、TCP Fast OpenLinux/macOS/FreeBSD、TLS 证书压缩RFC 8879含 zlib/Brotli/zstd、TLS 1.3 提供者级可插拔签名算法为后量子算法铺路、Windows 系统证书存储需环境变量启用。该版本还为 OpenSSL 库与 libssl 客户端含 TLS 和 QUIC写入了多篇教程文档。OpenSSL 1.1.12018-09-11TLS 1.3 元年NEWS.md#L1110-L1158 记录了 OpenSSL 进入 TLS 1.3 时代的完整清单RFC 8446 完全合规实现、早期数据0-RTT、握手后认证与 key update、中间盒兼容模式MCM、PSK、五个标准套件、RSA-PSS并回填至 TLS 1.2、可配置会话票据、无状态服务器、报文构造与扩展处理代码重写。同时随机数生成器被完全重写默认 RAND 方法采用符合 NIST SP 800-90Ar1 的 AES-CTR DRBG支持多 DRBG 实例种子链、公/私 DRBG 实例、fork 安全、每线程实例免锁操作。新算法包括 SHA3、SHA512/224/256、EdDSAEd25519/Ed448含 X509 与 TLS 支持、X448、多素数 RSA、SM2/SM3/SM4、SipHash、ARIA。此外还新增了 ClientHello 回调、Maximum Fragment Length 扩展、基于 URI 的统一 STORE 模块并在符号前缀上声明了OSSL与OPENSSL命名空间。OpenSSL 1.1.02016-08-25与更早的版本1.1.0NEWS.md#L1232-L1278完成了 API 的“不透明化”大迁移BIGNUM、EC_KEY、DH、DSA、RSA、BIO、EVP_MD_CTX、X509 系列等几乎所有 libcrypto/libssl 公共结构变为不透明移除 SSLv2 与 Kerberos 套件RC4 从默认套件中剔除引入no-deprecated构建选项与OPENSSL_API_COMPAT宏DANE TLSA 认证、新构建系统、新安全等级、scrypt、X25519、SSL_CONF、KDFTLS PRF、证书透明、HKDF。再往前1.0.2 带来 Suite B 与 DTLS 1.2NEWS.md#L1428-L14371.0.1 带来 TLS 1.1/1.2 与 HeartbeatNEWS.md#L1607-L16181.0.0 带来 RFC 3280 路径验证与 CMSNEWS.md#L1760-L17810.9.8 则完成了 BIGNUM 审计、ECDH/ECDSA、SHA-2 与 DTLS 引入NEWS.md#L1871-L1943。0.9.1c 这一行本身记录的是 1998 年从 SSLeay 0.9.0b 改名集成而来NEWS.md#L2291-L2301。安全补丁发布CVE 的“定调 倒序 跨版本线”模式NEWS.md 的另一半内容是安全补丁。其写作模式高度固定以 4.0.22026-08-25NEWS.md#L46-L91为例开场白声明 “OpenSSL 4.0.2 is a security patch release. The most severe CVE fixed in this release is Moderate.”——先给严重级别定调按严重级别降序列出每一项修复CVE 编号跟随在条目后。4.0.2 的 13 项修复覆盖了 QUIC 服务端INITIAL包处理双释放CVE-2026-18798、CMS 密钥解包堆溢出CVE-2026-63072、CMP 服务端伪造protectionAlg导致的非法指针解引用CVE-2026-63076、QUIC 入站通道队列无界内存增长CVE-2026-14456、RPK 服务端签名算法选择解引用缺失证书CVE-2026-14457、DTLS 未来 epoch 记录缓冲内存耗尽CVE-2026-54874、OCSP 响应校验客户端内存泄漏CVE-2026-54876、CMP 校验中将不可信 Sender DN 用作格式化字符串CVE-2026-63073、CMPextraCerts缓存无界增长CVE-2026-63074、QUIC ACK-only 包保留导致的内存耗尽CVE-2026-63075、EVP_Cipher()空密文下的 AEAD 伪造CVE-2026-75803以及 CCM 模式空密文认证标签校验修复。从文件整体可以总结出三条实用规律同一 CVE 会同时出现在所有仍在支持的版本线中。例如 PKCS#7/CMS 填充预言机 CVE-2019-1563、ECC 协同因子 CVE-2019-1547 与 Windows 安装路径问题 CVE-2019-1552在 1.0.2t、1.1.0l、1.1.1d 三个条目里同时列出NEWS.md#L1077-L1089、NEWS.md#L1163-L1171、NEWS.md#L1283-L1292。评估影响面时应横向搜索 CVE 编号看它击中了哪几条版本线补丁节奏功能版本发布后通常紧跟若干安全补丁版本4.0.0 → 4.0.1 → 4.0.2其间穿插少量 bug fix 版本如 3.5.2 的 FIPS 提供者 PCT 调整、3.5.3 的 PCT 修正见 NEWS.md#L405-L425回归也会单独列出且与 CVE 并列。例如 4.0.1 中 “HollowByte”握手消息缓冲过度分配与两个 4.0.0 回归openssl pkey交互式加密崩溃、openssl s_client -adv在 16384 字节读时提前断连3.6.1 中X509_V_FLAG_CRL_CHECK_ALL行为回退与 OCSP stapling 回归NEWS.md#L346-L350。这些非 CVE 条目对升级决策往往同样关键。按严重级别统计3.5.4/3.6.2/4.0.2 级别为 Moderate3.6.1/4.0.1 级别为 High3.5.1/3.3.3/3.2.2 级别为 Low——升级检查时可以先看这几个“定调句”快速判断紧迫程度。如何维护与生成 NEWS.mddev/NEWS-FORMAT.md 与发布工具链dev/NEWS-FORMAT.md 规定了 3.2 以来 NEWS.md 的编辑约定阅读文件时理解这些约定能更快抓住重点结构模板每个版本线一个OpenSSL x.y节内部先列各补丁版本、最后列初始功能版本每个发布条目的标准形式为### Major changes between OpenSSL {PREV_VERSION} and OpenSSL {VERSION} [1 Jan 2023] opener paragraph one or more blocks listed below as applicable, in order shown below trailing advice开场段措辞固定功能版本用 “OpenSSL x.y.0 is a feature release adding significant new functionality to OpenSSL.”含 CVE 的补丁版本用 “OpenSSL x.y.z is a security patch release. The most severe CVE fixed in this release is Medium.”无 CVE 补丁用 “is a patch release.”块顺序固定且重要性递减不兼容变更 → 新功能“This release adds the following new features:”→ 已知问题 → 文档增强 → 缺陷修复与缓解CVE 在前按严重度降序其后是普通 bug排版约定顶层列表用*、条目间空一行便于用户直接查看 tarball 原始文本RFC 编号用空格分隔RFC 9000URL 一律集中在文件尾部以链接定义形式引用没有条目的块直接省略。这些约定由发布工具链自动执行与校验dev/release.sh 是发布主脚本其配套文件说明见 dev/release-aux/README.md——其中fixup-NEWS.md-release.pl与fixup-NEWS.md-postrelease.pl分别在发布提交与发布后提交时自动修正 NEWS.md例如把“under development”占位条目替换为正式日期fixup-CHANGES.md-*.pl处理 CHANGES.mdrelease-version-fn.sh的get_version()/set_version()则直接读写 VERSION.dat。这也解释了为什么文件中 4.1 与 3.3.3 两个条目标注[under development]——它们是占位状态等待发布流程填充日期。实战用 NEWS.md 做版本决策与升级核对结合本仓库的实际内容给出三类常见操作的核对路径1. 确认当前仓库处于哪个版本线。读 VERSION.datMAJOR4 / MINOR1 / PATCH0 / PRE_RELEASE_TAGdev即 4.1-dev。这与 NEWS.md 顶部 4.1 节标注[under development]一致。构建完成后可用openssl version与openssl info后两者均为 3.0 起引入/增强的命令见 NEWS.md#L1002-L1003核对构建参数。2. 评估“我的版本需要打哪些补丁”。在 NEWS.md 中找到你所在的版本线小节从最新条目往下读先记录每个安全补丁的严重级别定调句再对照 CVE 编号清单。若某 CVE 同时出现在更旧版本线的条目中说明它是跨版本线回移的通用问题所有仍在维护的分支都已修复。3. 规划跨大版本升级如 3.x → 4.0。通读目标版本“potentially significant or incompatible changes”整节4.0 为 NEWS.md#L172-L237重点核对是否仍依赖 engine4.0 已彻底移除、是否使用c_rehash脚本、是否依赖 SSLv3/显式 EC 曲线需分别用enable-tls-deprecated-ec、enable-ec_explicit_curves显式开启、是否直接访问ASN1_STRING字段已不透明、是否使用被弃用的X509_cmp_time系函数、X509 API 的 const 签名变化是否触发告警。之后再用新版本的“新特性”节确认迁移后获得的等价能力如openssl rehash替代c_rehash、X509_check_certificate_times()替代时间比较函数。对于使用 QUIC 的团队NEWS.md 明确引导读者阅读 README-QUIC.md3.2/3.3 条目末尾均有该指引其中链接到相关手册页与示例代码DTLS 1.3 的监听器用法则指向 ossl-guide-dtlsv13(7) 手册页。相关文件索引文件作用NEWS.md本文主体0.9.x–4.1 全部版本线发布说明CHANGES.md逐版本详细变更列表NEWS.md 的“more details”指向dev/NEWS-FORMAT.mdNEWS.md 编辑规范与条目模板VERSION.dat当前仓库版本数据4.1.0-devSHLIB_VERSION4dev/release.sh 与 dev/release-aux/发布流程与 NEWS/CHANGES 自动修正脚本README-QUIC.mdQUIC 功能文档索引3.2/3.3 条目推荐阅读doc/designs/ech-api.md4.0 引入的 ECHRFC 9849API 设计include/openssl/ssl.h.inSSL_new_listener/SSL_accept_connection/SSL_write_ex2等 API 声明include/openssl/crypto.h.in4.1 新增CRYPTO_atomic_*原子指针 API 声明【免费下载链接】opensslGeneral purpose TLS and crypto library项目地址: https://gitcode.com/GitHub_Trending/ope/openssl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考