加密程序库-OpenSSL


OpenSSL包含一个命令行工具用来完成OpenSSL库中的所有功能,采用C/C++语言开发并在Apache协议下分发。它是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,但是不应该只将其作为一个库来使用,它还是一个多用途的、跨平台的密码工具。

The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. The project is managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation.
OpenSSL is based on the excellent SSLeay library developed by Eric A. Young and Tim J. Hudson. The OpenSSL toolkit is licensed under an Apache-style licence, which basically means that you are free to get and use it for commercial and non-commercial purposes subject to some simple license conditions.
The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation.
OpenSSL库包含两个主要的组件:
libssl:提供SSL/TLS协议的实现。
libcrypto:提供各种加密算法的实现,如对称加密、非对称加密、哈希等。
应用场景主要如下:
数据加密:保护数据的机密性和完整性。
数字签名:验证数据的真实性和完整性。
证书管理:处理SSL/TLS证书,实现安全的网络通信。
OpenSSL有许多的特征,而且还有SSL客户端和服务端特征,其还有如下特性:
美国联邦政府NIST FIPS 140-2一级评估确认
TLS,下一代SSL协议
X.509密钥和证书的生成
X.509证书权力
S/MIME加密
文件加密和粉碎
打乱UNIX密码
9个不同的商业密码硬件设备
密码性能测试
36个命令
6个消息摘要算法
9个密码算法
多个加密协议
-----2015-08-02-----
在 OpenSSL 的博客中,Rich Salz 宣布项目决定将许可从“唯一且特别” OpenSSL license 迁移到 Apache 2.0 license。为了在接下来的发布中做出变化,项目将“尽快要求每个贡献者签署一份贡献许可协议(Contributor License Agreement)”。个人和公司版本的 CLA 已经发布,而琐碎的补丁则不会要求提交者签署协议。Salz 最后还提到,未来还会披露更多细节,因为“还有许多积压的工作需要处理,而且这项多年来无人关注的工作还有许多细节需要理清。”
最新版本:1.0
该版本修复了体验版的 J-PAKE实现的错误(CVE-2010-4252),同时修复了一个老的bug(CVE-2010-4180)。
最新版本:1.1
添加了许多新特性,包括对中国国密体系中的SM2/SM3/SM4算法的全面支持:新特性。SM2椭圆曲线,SM3哈希摘要,SM4对称加密。参考: 中国国家密码管理局制定的商业密码算法标准
《GM/T 0006-2012 密码应用标识规范》定义国密算法OID标识
《GB/T 32907-2016 SM4分组密码算法》(原GM/T 0002-2012)
《GB/T 329??-2016 SM2椭圆曲线公钥密码算法》(原GM/T 0003-2012)
《GB/T 32905-2016 SM3密码杂凑算法》(原GM/T 0004-2012)
OpenSSL 1.1.1 版本最初发布于 2018年9月,由于官方对每一个长期支持版本提供 5 年的更新与维护,因此 OpenSSL 官方博客日前发布通告,称 OpenSSL 1.1.1 的支持将在 2023年9月结束,督促用户进行升级。官方表示,用户必须在9月11日版本 1.1.1 生命周期结束之前,升级到更新版本的 OpenSSL。1.1.1 系列生命周期于2023年9月中旬标记为已结束(EOL),这意味着它将不会再接收到公开的安全修复程序;当然也可以购买付费服务来获取由官方团队提供的维护,详情查看此处。
官方建议用户升级到更新版本的 OpenSSL。目前最新版本的 OpenSSL 3.1 在 2025 年 3 月 14 日前将得到官方支持,而长期版本 OpenSSL 3.0 的生命周期可达 2026 年 9 月 7 日。据悉OpenSSL 3.0 比起旧版本有许多重大变更,且并不完全兼容之前的版本。3.X 相对于旧版本的变更包括加入联邦资讯处理标准 (FIPS)、使用 Apache License 2.0 开源协议,同时也弃用了不少老旧 API。官方表示大多数使用 OpenSSL 1.1.1 的软件,都只需要重新编译都可以正常运行,只是开发者会看到许多已弃用 API 的编译警告。在 OpenSSL 1.1.1 生命周期结束之前,用户需采取必要的行动,以确保能够得到官方的支持,确保安全性。
最新版本:3.0
经过 3 年的开发,17 个 alpha 版本,2 个 beta 版本,超过 7500 个提交,以及来自 350 位不同开发者的贡献,OpenSSL 3.0 终于正式于2021年9月上旬发布了。下面是自1.1.1 以来的主要变化
主要版本:开发者可以从这里下载 OpenSSL 3.0,并升级你的应用程序使之兼容。OpenSSL 3.0 是一个大版本升级,并不完全向后兼容以前的版本。大多数使用 OpenSSL 1.1.1 的应用程序仍然可以正常工作,只是需要重新编译(可能会有关于使用废弃的 API 的编译警告)。还有一些不能完全兼容的应用可能需要进行修改才能正确编译和使用。如果应用程序需要利用 OpenSSL 3.0 中的一些新功能(例如 FIPS 模块),也需要对应用进行更改。
许可证变更:在以前的版本中,OpenSSL 是在 OpenSSL 和 SSLeay 下获得许可的。从 OpenSSL 3.0 开始,已经过渡到了 Apache License 2.0。旧的 OpenSSL 和 SSLeay 许可证仍然适用于旧版本(1.1.1 和更早的版本)。
Providers 和 FIPS 支持:OpenSSL 1.1.1 的主要变化之一是引入了 Providers(提供者) 概念。Providers 聚集在一起并提供可用的算法实现。使用 OpenSSL 3.0,可以以编程方式或通过配置文件指定你希望用于任何给定应用程序的 Providers。OpenSSL 3.0 标配 5 个不同的 Providers。随着时间的推移,第三方可能会分发可以接入 OpenSSL 的其他 Providers。通过 Providers 提供的所有算法实现都可以通过“高级” API 访问,无法使用 “低级 API” 访问它们。目前可用的一个标准 Providers 是 FIPS Providers。这使得 FIPS 验证的加密算法可用。FIPS Providers 默认处于禁用状态,需要在配置时使用enable-fips选项显式启用。如果启用,除了其他标准 Providers 之外,还会构建和安装 FIPS Providers,不需要单独的安装过程。
低级别的 API:OpenSSL 历来提供两套用于调用加密算法的 API:"高级" API(如 EVP API)和 "低级" API。高级别的 API 通常被设计成适用于所有算法类型。而 "低级" API 则是针对特定的算法实现的。长期以来,OpenSSL 开发团队一直不鼓励使用低级别的 API。在 OpenSSL 3.0 中,这一点变得更加明确。所有这些低级别的 API 都已经被废弃了。你仍然可以在你的应用程序中使用它们,但你可能会在编译过程中开始看到弃用警告。废弃的 API 可能会从未来的 OpenSSL 版本中删除,所以强烈建议开发者更新你的代码,以使用高级 API 来代替。
版本管理
OpenSSL 的版本管理已经随着 OpenSSL 3.0 的发布而改变,新的版本管理采用下方这样的格式:
MAJOR.MINOR.PATCH(主版本.次版本.补丁)
对于 OpenSSL 1.1.1 及以下版本,不同的补丁级别是由版本号后面的字母表示的,这一方法将不再使用,而是用版本号中的最后一个数字来表示补丁级别。第二个数字(MINOR)的变化表明可能已经添加了新的功能,但与相同 MAJOR 编号的 OpenSSL 在 API 和 ABI 上是兼容的。如果 MAJOR 数字发生变化,则不保证 API 和 ABI 的兼容性。更多详情可查看此处。
最新版本:3.1
v3.1 于2023年3月中旬正式发布了,主要是对 v3.0 中可用功能的一个小型增量改进版本。主要变化如下:
符合 FIPS 140-3 的 FIPS 提供程序
3.1 版本的 FIPS 提供程序已升级为符合 FIPS 140-3 标准。为了实现此合规性,需要对 FIPS 提供程序进行一些更改。其中最重要的更改是:某些算法包含在提供程序中,但不再被批准使用。包括三重 DES ECB、三重 DES CBC 和 EdDSA。出于向后兼容的原因,它们保留在 FIPS 提供程序中,但标有 fips=no 属性查询。这意味着所有需要 FIPS 合规性的应用程序都应该明确指定 fips=yes ,即使它们只加载了 FIPS 提供程序(通常通过配置或使用 EVP_default_properties_enable_fips() 函数)。现在每次加载模块时都会运行自检,而不是在安装模块时运行。由于 NIST 简化了自测过程,这些测试的运行速度比在 3.0 FIPS 提供程序中的运行速度快得多。
其他性能改进
重构 OSSL_LIB_CTX 代码以避免过度锁定
编码器和解码器框架的性能改进
对内部数据结构和缓存(例如散列结构、IV 缓存)的性能修复
改进的 FIPS RSA 密钥生成器性能
跨多个处理器架构对多种不同算法(例如 AES-GCM、ChaCha20、SM3、SM4、SM4-GCM)进行各种汇编器优化
最新版本:3.2
v3.2 首个 Alpha 已于2023年9月中旬发布。此版本增加了许多新功能,值得关注的变化包括:
支持客户端 QUIC,包括对多流 (multiple streams) 的支持 (RFC 9000)
支持在 TLS 中进行证书压缩 (RFC 8879),包括对 zlib、zstd 和 Brotli 的支持
Deterministic ECDSA (RFC 6979)
除了对 Ed25519 的现有支持之外,还支持 Ed25519ctx、Ed25519ph、Ed448 和 Ed448ph (RFC 8032)
AES-GCM-SIV (RFC 8452)
Argon2 (RFC 9106) 和支持线程池功能
HPKE (RFC 9180)
在 TLS 中使用原始公钥的能力 (RFC 7250)
支持 TCP Fast Open (RFC 7413),前提是操作系统也支持
支持 TLS 中基于 provider 的可插拔签名方案,使第三方 post-quantum 算法 provider 能够将这些算法与 TLS 结合使用
支持 TLS 1.3 中的 Brainpool 曲线
SM4-XTS SM4-XTS
支持使用 Windows 系统证书存储作为可信根证书的来源。默认情况下尚未启用此功能,必须使用环境变量激活。该特性可能会在未来的功能版本中默认启用。
详情查看发行公告说明。
开发团队于2023年11月下旬宣布OpenSSL 3.2 系列的第一个版本 3.2.0 正式 GA。3.2 版本实现了针对 QUIC 的初版客户端,QUIC 是 Google 开发的通用传输层网络协议,后来被 IETF 采用。 对于 v3.3 和明年的 v3.4,他们的目标是进一步完成此实现。此外还增加了对 TLS 1.3 中 Brainpool 曲线的支持、原始公钥 (RFC7250) 支持、使用 Brotli 和 Zstd 进行证书压缩的支持、SM4-XTS 支持、确定性 ECDSA 签名、AES-GCM-SIV、混合公钥加密 (HPKE) ),以及其他特性。
v3.2 还将默认的 SSL/TLS 安全级别从 1 更改为 2。主要变化如下:
客户端 QUIC 支持,包括对多个流的支持(RFC 9000)
在 TLS 中支持证书压缩(RFC 8879),包括对 zlib、zstd 和 Brotli 的支持
Deterministic ECDSA(RFC 6979)
除了对 Ed25519 和 Ed448 的现有支持外,还支持 Ed25519ctx、Ed25519ph 和 Ed448ph(RFC 8032)
AES-GCM-SIV(RFC 8452)
Argon2(RFC 9106)和支持线程池功能
HPKE(RFC 9180)
在 TLS 中使用原始公钥的能力(RFC 7250)
如果操作系统允许,支持 TCP Fast Open(RFC 7413)
在 TLS 中支持基于提供者的可插拔签名方案,使第三方 post-quantum 和其他算法提供者能够在 TLS 中使用这些算法
在 TLS 1.3 中支持 Brainpool 曲线
SM4-XTS
支持使用 Windows 系统证书存储作为受信任根证书的来源。该功能尚未默认启用,需要使用环境变量进行激活。预计在未来的功能版本中,这将成为默认启用的功能
详情查看 NEWS 文件和 CHANGES 文件。对新的 QUIC 功能感兴趣的用户,建议阅读 QUIC 的 README 文件,其中提供了相关文档和示例代码的链接。3.3 将是 3.2 之后的下一个功能性更新,最迟将于 2024 年 4 月 30 日发布。预计该版本将包括 QUIC 服务器支持。
最新版本:3.3
v3.3.0 已于2024年4月上旬发布,此版本在 v3.2 中引入的 QUIC 连接支持的基础上,对 QUIC 传输协议支持做了许多改进。v3.2 的重点是 QUIC 客户端支持,而 v3.3 则在 QUIC 服务器端做了更多工作。有关 OpenSSL 当前 QUIC HTTP/3 支持的详细信息可查看此文档。v3.3 的变化包括:
支持用于跟踪 QUIC 连接的 qlogc
围绕 QUIC 连接和多流 QUIC 服务器支持的许多新 API
针对 Microsoft Azure Cobalt 100 的 AES-GCM unroll8 优化
针对 ARM Neoverse V1 和 V2 处理器优化了 AES-CTR
为 Apple Silicon M3 优化了 AES 和 SHA3
在 LoongArch64 上实现了 MD5 的汇编
最新版本:3.4
v3.4.0 现已于2024年10月下旬发布,这是一个功能版本。包含以下潜在重大或不兼容的变化:
弃用 TS_VERIFY_CTX_set_* 函数并添加具有改进语义的替代 TS_VERIFY_CTX_set0_* 函数
重新设计了 Windows 上 OPENSSLDIR/ENGINESDIR/MODULESDIR 的使用,这样以前的 build time locations 现在可以在运行时通过 registry keys 定义
FIPS provider 中的 X25519 和 X448 密钥交换实现未经批准且具有 fips=noproperty。
SHAKE-128 和 SHAKE-256 实现不再具有默认摘要长度。这意味着这些算法不能与 EVP_DigestFinal/_ex() 一起使用,除非之前设置了 xoflen 参数。
如果在配置文件中设置 config_diagnostics=1,将导致 SSL_CTX_new () 和 SSL_CTX_new_ex() 在 ssl 模块配置出现错误时返回错误信息。
对于所有最低 TLS 版本 > 1.0 的连接,TLS 客户端 hello 中将使用空的重新协商扩展,而不是空的重新协商 SCSV。
弃用 SSL_SESSION_get_time()、SSL_SESSION_set_time() 和 SSL_CTX_flush_sessions() 函数,转而使用各自的_ex 函数,这些函数在具有 Y2038 安全 time_t 的平台上是 Y2038 安全的。
此版本添加了以下新功能:
支持直接获取复合签名算法,如 RSA-SHA2-256,包括新的 API functions。
FIPS provider 中的 FIPS 指标支持以及未来 FIPS 140-3 验证所需的 FIPS provider 的各种更新。
PKCS#12 中 RFC 9579 (PBMAC1) 的实现。
使用静态链接的 jitterentropy 库的新随机种子源 RNG JITTER。
新选项 -not_before 和 -not_after,用于明确设置使用 req 和 x509 应用程序创建的证书的开始和结束日期。
支持 RFC 9150 和 TLS 1.3 中的 TLS_SHA256_SHA256 和 TLS_SHA384_SHA384 纯密码套件。
支持在 CMP 中请求 CRL。
支持与属性证书相关的其他 X.509v3 扩展。
初始属性证书 (RFC 5755) 支持。
可以自定义 ECC 组初始化以使用预先计算的值来节省 CPU 时间,并通过 P-256 实现使用此功能。
更多信息可参考发行公告。
最新版本:3.5
v3.5 长期支持 (LTS) 版本已于2025年4月上旬正式发布,这是此广泛使用的 SSL 和 TLS 协议处理库的最新功能更新。其增加了对服务器端 QUIC ( RFC 9000 ) 的支持、对第三方 QUIC 堆栈的支持、PQC 算法支持、各种默认更改和其他增强功能。
此版本包含以下可能重大或不兼容的更改:
req、cms 和 smime 应用程序的默认加密密码从 des-ede3-cbc 更改为 aes-256-cbc。
默认 TLS 支持组列表已更改为包含并优先使用混合 PQC KEM 组。一些实际上未使用的组已从默认列表中删除。
默认 TLS 密钥共享已更改为提供 X25519MLKEM768 和 X25519。
所有 BIO_meth_get_*() 函数均已弃用。
此版本添加了以下新功能:
支持服务器端 QUIC(RFC 9000);
支持第三方 QUIC 堆栈,包括 0-RTT 支持;
支持 PQC 算法(ML-KEM、ML-DSA 和 SLH-DSA);
新的配置选项 no-tls-deprecated-ec,用于禁用对 RFC8422 中已弃用的 TLS 组的支持;
新的配置选项 enable-fips-jitter,使 FIPS 提供程序使用 JITTER 种子源;
支持 CMP 中的中央密钥生成;
增加了对不透明对称密钥对象(EVP_SKEY)的支持;
支持多个 TLS 密钥共享和改进的 TLS 密钥建立组可配置性;
API 支持在提供的密码算法中进行流水线操作。
官方主页:http://www.openssl.org/
中文参考:http://www.openssl.cn/

The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. The project is managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation.
OpenSSL is based on the excellent SSLeay library developed by Eric A. Young and Tim J. Hudson. The OpenSSL toolkit is licensed under an Apache-style licence, which basically means that you are free to get and use it for commercial and non-commercial purposes subject to some simple license conditions.
The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and Open Source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library managed by a worldwide community of volunteers that use the Internet to communicate, plan, and develop the OpenSSL toolkit and its related documentation.
OpenSSL库包含两个主要的组件:
libssl:提供SSL/TLS协议的实现。
libcrypto:提供各种加密算法的实现,如对称加密、非对称加密、哈希等。
应用场景主要如下:
数据加密:保护数据的机密性和完整性。
数字签名:验证数据的真实性和完整性。
证书管理:处理SSL/TLS证书,实现安全的网络通信。
OpenSSL有许多的特征,而且还有SSL客户端和服务端特征,其还有如下特性:
美国联邦政府NIST FIPS 140-2一级评估确认
TLS,下一代SSL协议
X.509密钥和证书的生成
X.509证书权力
S/MIME加密
文件加密和粉碎
打乱UNIX密码
9个不同的商业密码硬件设备
密码性能测试
36个命令
6个消息摘要算法
9个密码算法
多个加密协议
-----2015-08-02-----
在 OpenSSL 的博客中,Rich Salz 宣布项目决定将许可从“唯一且特别” OpenSSL license 迁移到 Apache 2.0 license。为了在接下来的发布中做出变化,项目将“尽快要求每个贡献者签署一份贡献许可协议(Contributor License Agreement)”。个人和公司版本的 CLA 已经发布,而琐碎的补丁则不会要求提交者签署协议。Salz 最后还提到,未来还会披露更多细节,因为“还有许多积压的工作需要处理,而且这项多年来无人关注的工作还有许多细节需要理清。”
最新版本:1.0
该版本修复了体验版的 J-PAKE实现的错误(CVE-2010-4252),同时修复了一个老的bug(CVE-2010-4180)。
最新版本:1.1
添加了许多新特性,包括对中国国密体系中的SM2/SM3/SM4算法的全面支持:新特性。SM2椭圆曲线,SM3哈希摘要,SM4对称加密。参考: 中国国家密码管理局制定的商业密码算法标准
《GM/T 0006-2012 密码应用标识规范》定义国密算法OID标识
《GB/T 32907-2016 SM4分组密码算法》(原GM/T 0002-2012)
《GB/T 329??-2016 SM2椭圆曲线公钥密码算法》(原GM/T 0003-2012)
《GB/T 32905-2016 SM3密码杂凑算法》(原GM/T 0004-2012)
OpenSSL 1.1.1 版本最初发布于 2018年9月,由于官方对每一个长期支持版本提供 5 年的更新与维护,因此 OpenSSL 官方博客日前发布通告,称 OpenSSL 1.1.1 的支持将在 2023年9月结束,督促用户进行升级。官方表示,用户必须在9月11日版本 1.1.1 生命周期结束之前,升级到更新版本的 OpenSSL。1.1.1 系列生命周期于2023年9月中旬标记为已结束(EOL),这意味着它将不会再接收到公开的安全修复程序;当然也可以购买付费服务来获取由官方团队提供的维护,详情查看此处。
官方建议用户升级到更新版本的 OpenSSL。目前最新版本的 OpenSSL 3.1 在 2025 年 3 月 14 日前将得到官方支持,而长期版本 OpenSSL 3.0 的生命周期可达 2026 年 9 月 7 日。据悉OpenSSL 3.0 比起旧版本有许多重大变更,且并不完全兼容之前的版本。3.X 相对于旧版本的变更包括加入联邦资讯处理标准 (FIPS)、使用 Apache License 2.0 开源协议,同时也弃用了不少老旧 API。官方表示大多数使用 OpenSSL 1.1.1 的软件,都只需要重新编译都可以正常运行,只是开发者会看到许多已弃用 API 的编译警告。在 OpenSSL 1.1.1 生命周期结束之前,用户需采取必要的行动,以确保能够得到官方的支持,确保安全性。
最新版本:3.0
经过 3 年的开发,17 个 alpha 版本,2 个 beta 版本,超过 7500 个提交,以及来自 350 位不同开发者的贡献,OpenSSL 3.0 终于正式于2021年9月上旬发布了。下面是自1.1.1 以来的主要变化
主要版本:开发者可以从这里下载 OpenSSL 3.0,并升级你的应用程序使之兼容。OpenSSL 3.0 是一个大版本升级,并不完全向后兼容以前的版本。大多数使用 OpenSSL 1.1.1 的应用程序仍然可以正常工作,只是需要重新编译(可能会有关于使用废弃的 API 的编译警告)。还有一些不能完全兼容的应用可能需要进行修改才能正确编译和使用。如果应用程序需要利用 OpenSSL 3.0 中的一些新功能(例如 FIPS 模块),也需要对应用进行更改。
许可证变更:在以前的版本中,OpenSSL 是在 OpenSSL 和 SSLeay 下获得许可的。从 OpenSSL 3.0 开始,已经过渡到了 Apache License 2.0。旧的 OpenSSL 和 SSLeay 许可证仍然适用于旧版本(1.1.1 和更早的版本)。
Providers 和 FIPS 支持:OpenSSL 1.1.1 的主要变化之一是引入了 Providers(提供者) 概念。Providers 聚集在一起并提供可用的算法实现。使用 OpenSSL 3.0,可以以编程方式或通过配置文件指定你希望用于任何给定应用程序的 Providers。OpenSSL 3.0 标配 5 个不同的 Providers。随着时间的推移,第三方可能会分发可以接入 OpenSSL 的其他 Providers。通过 Providers 提供的所有算法实现都可以通过“高级” API 访问,无法使用 “低级 API” 访问它们。目前可用的一个标准 Providers 是 FIPS Providers。这使得 FIPS 验证的加密算法可用。FIPS Providers 默认处于禁用状态,需要在配置时使用enable-fips选项显式启用。如果启用,除了其他标准 Providers 之外,还会构建和安装 FIPS Providers,不需要单独的安装过程。
低级别的 API:OpenSSL 历来提供两套用于调用加密算法的 API:"高级" API(如 EVP API)和 "低级" API。高级别的 API 通常被设计成适用于所有算法类型。而 "低级" API 则是针对特定的算法实现的。长期以来,OpenSSL 开发团队一直不鼓励使用低级别的 API。在 OpenSSL 3.0 中,这一点变得更加明确。所有这些低级别的 API 都已经被废弃了。你仍然可以在你的应用程序中使用它们,但你可能会在编译过程中开始看到弃用警告。废弃的 API 可能会从未来的 OpenSSL 版本中删除,所以强烈建议开发者更新你的代码,以使用高级 API 来代替。
版本管理
OpenSSL 的版本管理已经随着 OpenSSL 3.0 的发布而改变,新的版本管理采用下方这样的格式:
MAJOR.MINOR.PATCH(主版本.次版本.补丁)
对于 OpenSSL 1.1.1 及以下版本,不同的补丁级别是由版本号后面的字母表示的,这一方法将不再使用,而是用版本号中的最后一个数字来表示补丁级别。第二个数字(MINOR)的变化表明可能已经添加了新的功能,但与相同 MAJOR 编号的 OpenSSL 在 API 和 ABI 上是兼容的。如果 MAJOR 数字发生变化,则不保证 API 和 ABI 的兼容性。更多详情可查看此处。
最新版本:3.1
v3.1 于2023年3月中旬正式发布了,主要是对 v3.0 中可用功能的一个小型增量改进版本。主要变化如下:
符合 FIPS 140-3 的 FIPS 提供程序
3.1 版本的 FIPS 提供程序已升级为符合 FIPS 140-3 标准。为了实现此合规性,需要对 FIPS 提供程序进行一些更改。其中最重要的更改是:某些算法包含在提供程序中,但不再被批准使用。包括三重 DES ECB、三重 DES CBC 和 EdDSA。出于向后兼容的原因,它们保留在 FIPS 提供程序中,但标有 fips=no 属性查询。这意味着所有需要 FIPS 合规性的应用程序都应该明确指定 fips=yes ,即使它们只加载了 FIPS 提供程序(通常通过配置或使用 EVP_default_properties_enable_fips() 函数)。现在每次加载模块时都会运行自检,而不是在安装模块时运行。由于 NIST 简化了自测过程,这些测试的运行速度比在 3.0 FIPS 提供程序中的运行速度快得多。
其他性能改进
重构 OSSL_LIB_CTX 代码以避免过度锁定
编码器和解码器框架的性能改进
对内部数据结构和缓存(例如散列结构、IV 缓存)的性能修复
改进的 FIPS RSA 密钥生成器性能
跨多个处理器架构对多种不同算法(例如 AES-GCM、ChaCha20、SM3、SM4、SM4-GCM)进行各种汇编器优化
最新版本:3.2
v3.2 首个 Alpha 已于2023年9月中旬发布。此版本增加了许多新功能,值得关注的变化包括:
支持客户端 QUIC,包括对多流 (multiple streams) 的支持 (RFC 9000)
支持在 TLS 中进行证书压缩 (RFC 8879),包括对 zlib、zstd 和 Brotli 的支持
Deterministic ECDSA (RFC 6979)
除了对 Ed25519 的现有支持之外,还支持 Ed25519ctx、Ed25519ph、Ed448 和 Ed448ph (RFC 8032)
AES-GCM-SIV (RFC 8452)
Argon2 (RFC 9106) 和支持线程池功能
HPKE (RFC 9180)
在 TLS 中使用原始公钥的能力 (RFC 7250)
支持 TCP Fast Open (RFC 7413),前提是操作系统也支持
支持 TLS 中基于 provider 的可插拔签名方案,使第三方 post-quantum 算法 provider 能够将这些算法与 TLS 结合使用
支持 TLS 1.3 中的 Brainpool 曲线
SM4-XTS SM4-XTS
支持使用 Windows 系统证书存储作为可信根证书的来源。默认情况下尚未启用此功能,必须使用环境变量激活。该特性可能会在未来的功能版本中默认启用。
详情查看发行公告说明。
开发团队于2023年11月下旬宣布OpenSSL 3.2 系列的第一个版本 3.2.0 正式 GA。3.2 版本实现了针对 QUIC 的初版客户端,QUIC 是 Google 开发的通用传输层网络协议,后来被 IETF 采用。 对于 v3.3 和明年的 v3.4,他们的目标是进一步完成此实现。此外还增加了对 TLS 1.3 中 Brainpool 曲线的支持、原始公钥 (RFC7250) 支持、使用 Brotli 和 Zstd 进行证书压缩的支持、SM4-XTS 支持、确定性 ECDSA 签名、AES-GCM-SIV、混合公钥加密 (HPKE) ),以及其他特性。
v3.2 还将默认的 SSL/TLS 安全级别从 1 更改为 2。主要变化如下:
客户端 QUIC 支持,包括对多个流的支持(RFC 9000)
在 TLS 中支持证书压缩(RFC 8879),包括对 zlib、zstd 和 Brotli 的支持
Deterministic ECDSA(RFC 6979)
除了对 Ed25519 和 Ed448 的现有支持外,还支持 Ed25519ctx、Ed25519ph 和 Ed448ph(RFC 8032)
AES-GCM-SIV(RFC 8452)
Argon2(RFC 9106)和支持线程池功能
HPKE(RFC 9180)
在 TLS 中使用原始公钥的能力(RFC 7250)
如果操作系统允许,支持 TCP Fast Open(RFC 7413)
在 TLS 中支持基于提供者的可插拔签名方案,使第三方 post-quantum 和其他算法提供者能够在 TLS 中使用这些算法
在 TLS 1.3 中支持 Brainpool 曲线
SM4-XTS
支持使用 Windows 系统证书存储作为受信任根证书的来源。该功能尚未默认启用,需要使用环境变量进行激活。预计在未来的功能版本中,这将成为默认启用的功能
详情查看 NEWS 文件和 CHANGES 文件。对新的 QUIC 功能感兴趣的用户,建议阅读 QUIC 的 README 文件,其中提供了相关文档和示例代码的链接。3.3 将是 3.2 之后的下一个功能性更新,最迟将于 2024 年 4 月 30 日发布。预计该版本将包括 QUIC 服务器支持。
最新版本:3.3
v3.3.0 已于2024年4月上旬发布,此版本在 v3.2 中引入的 QUIC 连接支持的基础上,对 QUIC 传输协议支持做了许多改进。v3.2 的重点是 QUIC 客户端支持,而 v3.3 则在 QUIC 服务器端做了更多工作。有关 OpenSSL 当前 QUIC HTTP/3 支持的详细信息可查看此文档。v3.3 的变化包括:
支持用于跟踪 QUIC 连接的 qlogc
围绕 QUIC 连接和多流 QUIC 服务器支持的许多新 API
针对 Microsoft Azure Cobalt 100 的 AES-GCM unroll8 优化
针对 ARM Neoverse V1 和 V2 处理器优化了 AES-CTR
为 Apple Silicon M3 优化了 AES 和 SHA3
在 LoongArch64 上实现了 MD5 的汇编
最新版本:3.4
v3.4.0 现已于2024年10月下旬发布,这是一个功能版本。包含以下潜在重大或不兼容的变化:
弃用 TS_VERIFY_CTX_set_* 函数并添加具有改进语义的替代 TS_VERIFY_CTX_set0_* 函数
重新设计了 Windows 上 OPENSSLDIR/ENGINESDIR/MODULESDIR 的使用,这样以前的 build time locations 现在可以在运行时通过 registry keys 定义
FIPS provider 中的 X25519 和 X448 密钥交换实现未经批准且具有 fips=noproperty。
SHAKE-128 和 SHAKE-256 实现不再具有默认摘要长度。这意味着这些算法不能与 EVP_DigestFinal/_ex() 一起使用,除非之前设置了 xoflen 参数。
如果在配置文件中设置 config_diagnostics=1,将导致 SSL_CTX_new () 和 SSL_CTX_new_ex() 在 ssl 模块配置出现错误时返回错误信息。
对于所有最低 TLS 版本 > 1.0 的连接,TLS 客户端 hello 中将使用空的重新协商扩展,而不是空的重新协商 SCSV。
弃用 SSL_SESSION_get_time()、SSL_SESSION_set_time() 和 SSL_CTX_flush_sessions() 函数,转而使用各自的_ex 函数,这些函数在具有 Y2038 安全 time_t 的平台上是 Y2038 安全的。
此版本添加了以下新功能:
支持直接获取复合签名算法,如 RSA-SHA2-256,包括新的 API functions。
FIPS provider 中的 FIPS 指标支持以及未来 FIPS 140-3 验证所需的 FIPS provider 的各种更新。
PKCS#12 中 RFC 9579 (PBMAC1) 的实现。
使用静态链接的 jitterentropy 库的新随机种子源 RNG JITTER。
新选项 -not_before 和 -not_after,用于明确设置使用 req 和 x509 应用程序创建的证书的开始和结束日期。
支持 RFC 9150 和 TLS 1.3 中的 TLS_SHA256_SHA256 和 TLS_SHA384_SHA384 纯密码套件。
支持在 CMP 中请求 CRL。
支持与属性证书相关的其他 X.509v3 扩展。
初始属性证书 (RFC 5755) 支持。
可以自定义 ECC 组初始化以使用预先计算的值来节省 CPU 时间,并通过 P-256 实现使用此功能。
更多信息可参考发行公告。
最新版本:3.5
v3.5 长期支持 (LTS) 版本已于2025年4月上旬正式发布,这是此广泛使用的 SSL 和 TLS 协议处理库的最新功能更新。其增加了对服务器端 QUIC ( RFC 9000 ) 的支持、对第三方 QUIC 堆栈的支持、PQC 算法支持、各种默认更改和其他增强功能。
此版本包含以下可能重大或不兼容的更改:
req、cms 和 smime 应用程序的默认加密密码从 des-ede3-cbc 更改为 aes-256-cbc。
默认 TLS 支持组列表已更改为包含并优先使用混合 PQC KEM 组。一些实际上未使用的组已从默认列表中删除。
默认 TLS 密钥共享已更改为提供 X25519MLKEM768 和 X25519。
所有 BIO_meth_get_*() 函数均已弃用。
此版本添加了以下新功能:
支持服务器端 QUIC(RFC 9000);
支持第三方 QUIC 堆栈,包括 0-RTT 支持;
支持 PQC 算法(ML-KEM、ML-DSA 和 SLH-DSA);
新的配置选项 no-tls-deprecated-ec,用于禁用对 RFC8422 中已弃用的 TLS 组的支持;
新的配置选项 enable-fips-jitter,使 FIPS 提供程序使用 JITTER 种子源;
支持 CMP 中的中央密钥生成;
增加了对不透明对称密钥对象(EVP_SKEY)的支持;
支持多个 TLS 密钥共享和改进的 TLS 密钥建立组可配置性;
API 支持在提供的密码算法中进行流水线操作。
官方主页:http://www.openssl.org/
中文参考:http://www.openssl.cn/