Compartilhar via


SafeEvpPKeyHandle.DuplicateHandle up-refs o identificador

Juntamente com o trabalho para habilitar o suporte a provedores OpenSSL, foi feita uma alteração no método SafeEvpPKeyHandle.DuplicateHandle() que afeta os construtores ECDsaOpenSsl e RSAOpenSsl que levam um SafeEvpPKeyHandle. As modificações externas do identificador passado agora também afetam o identificador armazenado em instâncias dessas classes.

Comportamento anterior

DuplicateHandle() criou uma nova instância de EVP_PKEY. As modificações na chave duplicada (ou seja, por meio de chamadas diretas para APIs OpenSSL) não afetaram a chave original. SafeEvpPKeyHandle.DuplicateHandle foi chamado pelos construtores de ECDsaOpenSsl e RSAOpenSsl que levam um SafeEvpPKeyHandle.

Novo comportamento

DuplicateHandle() incrementa a contagem de referência do EVP_PKEY existente e retorna um identificador para a mesma chave. Isso significa que chamadas externas para APIs OpenSSL que modificam EVP_PKEY agora também afetam instâncias do SafeEvpPKeyHandle duplicado. Essas APIs incluem instâncias de ECDsaOpenSsl e RSAOpenSsl criadas com base nesses identificadores.

Versão introduzida

.NET 9 versão prévia 7

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

Essa alteração foi feita para habilitar o suporte a provedores OpenSSL. Como efeito colateral, também há algumas melhorias de desempenho.

Evite modificações de EVP_PKEY passadas para APIs do .NET. Se você não puder evitar modificações em EVP_PKEY, crie uma cópia de EVP_PKEY por conta própria (ou seja, copie parâmetros para a nova instância de EVP_PKEY).

APIs afetadas

Todas as APIs que aceitam uma instância RSA ou ECDsa originária de SafeEvpPKeyHandle também são afetadas.