Partilhar via


Primitivas criptográficas OpenSSL não suportadas no macOS

A partir do .NET 10, primitivos criptográficos suportados por OpenSSL não são mais suportados no macOS. System.Security.Cryptography.AesCcm e classes que são específicas para OpenSSL, como System.Security.Cryptography.RSAOpenSsl, agora lançam um PlatformNotSupportedException no macOS.

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, as classes que são específicas do OpenSSL, como System.Security.Cryptography.RSAOpenSsl, funcionavam no macOS se o OpenSSL estivesse disponível.

System.Security.Cryptography.AesCcm funcionou no macOS se o OpenSSL estivesse disponível.

Novo comportamento

A partir do .NET 10, as classes específicas do OpenSSL, como RSAOpenSsl, não funcionam no macOS, mesmo que o OpenSSL esteja disponível, e uma PlatformNotSupportedException exceção é lançada.

AesCcm lança uma PlatformNotSupportedException exceção.

Tipo de mudança disruptiva

Trata-se de uma mudança de comportamento.

Motivo da mudança

O suporte para as primitivas suportadas por OpenSSL originou-se do .NET Core 1.0, onde a criptografia no macOS foi implementada com OpenSSL. Isso não era ideal porque uma versão recente do OpenSSL não vem no macOS, e adquirir e configurar o OpenSSL no macOS era problemático. No período de tempo do .NET Core 2.0, a criptografia foi movida para a funcionalidade integrada da Apple, de modo que a funcionalidade criptográfica "simplesmente funcionou" sem a necessidade de adquirir componentes adicionais.

Os tipos que são sufixados como OpenSsl foram deixados como sendo implementados pelo OpenSSL, e AesCcm não tem uma implementação nas bibliotecas criptográficas da Apple.

Suportar essas primitivas apoiadas por OpenSSL no macOS tornou-se mais difícil, pois a Apple tornou mais difícil carregar bibliotecas de certos caminhos e complica a distribuição de software no macOS.

Se você estiver usando primitivos apoiados por OpenSSL sem qualquer intenção específica de usar OpenSSL, a recomendação é usar as fábricas que fornecem uma implementação do macOS:

  • new DSAOpenSsl(...) ->DSA.Create(...)
  • new ECDiffieHellmanOpenSsl(...) ->ECDiffieHellman.Create(...)
  • new ECDsaOpenSsl(...) ->ECDsa.Create(...)
  • new RSAOpenSsl(...) ->RSA.Create(...)

System.Security.Cryptography.AesCcm não tem equivalente funcional no macOS. Considere usar uma primitiva criptográfica diferente, como System.Security.Cryptography.AesGcm, em vez disso.

APIs afetadas