SafeEvpPKeyHandle.DuplicateHandle 会增加句柄的引用计数

除了努力启用 OpenSSL 提供程序的支持外,还对 SafeEvpPKeyHandle.DuplicateHandle() 方法进行了变更,该方法会影响使用 SafeEvpPKeyHandleECDsaOpenSslRSAOpenSsl 构造函数。 对传递句柄的外部修改现在也会影响存储在这些类实例中的句柄。

旧行为

DuplicateHandle() 创建了一个新 EVP_PKEY 实例。 对重复密钥的修改(即通过直接调用 OpenSSL API)不会影响原始密钥。 使用 SafeEvpPKeyHandleECDsaOpenSslRSAOpenSsl 构造函数会调用 SafeEvpPKeyHandle.DuplicateHandle

新行为

DuplicateHandle() 会增加现有 EVP_PKEY 的引用计数,并返回指向同一秘钥的句柄。 这意味着对修改 EVP_PKEY 的 OpenSSL API 的外部调用现在也会影响重复的 SafeEvpPKeyHandle 实例。 这些 API 包括根据此类句柄创建的 ECDsaOpenSslRSAOpenSsl 实例。

引入的版本

.NET 9 预览版 7

中断性变更的类型

此更改为行为更改

更改原因

进行此更改是为了启用 OpenSSL 提供程序支持。 作为附带效果,也有一些性能改进。

避免修改传入 .NET API 的 EVP_PKEY。 如果无法避免对 EVP_PKEY 的修改,请自行创建 EVP_PKEY 的副本(即,将参数复制到新的 EVP_PKEY 实例中)。

受影响的 API

每一个接受源自 SafeEvpPKeyHandleRSAECDsa 实例的 API 也会受到影响。