SafeEvpPKeyHandle.DuplicateHandle incrementa las referencias del controlador
Junto con el trabajo para habilitar la compatibilidad con los proveedores de OpenSSL, se realizó un cambio en el método SafeEvpPKeyHandle.DuplicateHandle() que afecta a los constructores ECDsaOpenSsl y RSAOpenSsl que toman un SafeEvpPKeyHandle. Las modificaciones externas del controlador pasado ahora también afectan al controlador almacenado en instancias de esas clases.
Comportamiento anterior
DuplicateHandle() creó una nueva instancia de EVP_PKEY
. Las modificaciones de la clave duplicada (es decir, mediante llamadas directas a las API de OpenSSL) no afectaron a la clave original. Los constructores de ECDsaOpenSsl y RSAOpenSsl que toman un SafeEvpPKeyHandle llamaron a SafeEvpPKeyHandle.DuplicateHandle
.
Comportamiento nuevo
DuplicateHandle() incrementa el recuento de referencias del EVP_PKEY
existente y devuelve un identificador a la misma clave. Eso significa que las llamadas externas a las API de OpenSSL que modifican EVP_PKEY
ahora también afectan a las instancias del SafeEvpPKeyHandle duplicado. Esas API incluyen instancias de ECDsaOpenSsl y RSAOpenSsl creadas a partir de tales controladores.
Versión introducida
.NET 9 (versión preliminar 7)
Tipo de cambio importante
Este es un cambio de funcionamiento.
Motivo del cambio
Este cambio se realizó para habilitar la compatibilidad con proveedores de OpenSSL. Como efecto secundario, también hay algunas mejoras de rendimiento.
Acción recomendada
Evite las modificaciones de EVP_PKEY
pasadas a las API de .NET. Si no puede evitar las modificaciones en EVP_PKEY
, cree usted mismo una copia de EVP_PKEY
(es decir, copie los parámetros en la nueva instancia de EVP_PKEY
).
API afectadas
- System.Security.Cryptography.SafeEvpPKeyHandle.DuplicateHandle()
- ECDsaOpenSsl(SafeEvpPKeyHandle)
- RSAOpenSsl(SafeEvpPKeyHandle)
Todas las API que acepten una instancia de RSA o ECDsa que proceda de SafeEvpPKeyHandle también se verán afectadas.