除了努力启用 OpenSSL 提供程序的支持外,还对 SafeEvpPKeyHandle.DuplicateHandle() 方法进行了变更,该方法会影响使用 SafeEvpPKeyHandle 的 ECDsaOpenSsl 和 RSAOpenSsl 构造函数。 对传递句柄的外部修改现在也会影响存储在这些类实例中的句柄。
旧行为
DuplicateHandle() 创建了一个新 EVP_PKEY
实例。 对重复密钥的修改(即通过直接调用 OpenSSL API)不会影响原始密钥。 使用 SafeEvpPKeyHandle 的 ECDsaOpenSsl 和 RSAOpenSsl 构造函数会调用 SafeEvpPKeyHandle.DuplicateHandle
。
新行为
DuplicateHandle() 会增加现有 EVP_PKEY
的引用计数,并返回指向同一秘钥的句柄。 这意味着对修改 EVP_PKEY
的 OpenSSL API 的外部调用现在也会影响重复的 SafeEvpPKeyHandle 实例。 这些 API 包括根据此类句柄创建的 ECDsaOpenSsl 和 RSAOpenSsl 实例。
引入的版本
.NET 9 预览版 7
中断性变更的类型
此更改为行为更改。
更改原因
进行此更改是为了启用 OpenSSL 提供程序支持。 作为附带效果,也有一些性能改进。
建议的操作
避免修改传入 .NET API 的 EVP_PKEY
。 如果无法避免对 EVP_PKEY
的修改,请自行创建 EVP_PKEY
的副本(即,将参数复制到新的 EVP_PKEY
实例中)。
受影响的 API
- System.Security.Cryptography.SafeEvpPKeyHandle.DuplicateHandle()
- ECDsaOpenSsl(SafeEvpPKeyHandle)
- RSAOpenSsl(SafeEvpPKeyHandle)
每一个接受源自 SafeEvpPKeyHandle 的 RSA 或 ECDsa 实例的 API 也会受到影响。