Compartilhar via


Não há suporte para primitivos criptográficos OpenSSL no macOS

A partir do .NET 10, primitivos criptográficos com suporte do OpenSSL não têm mais suporte no macOS. System.Security.Cryptography.AesCcm e classes específicas do OpenSSL, como System.Security.Cryptography.RSAOpenSsl, lançam agora um PlatformNotSupportedException no macOS.

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, classes específicas do OpenSSL, como System.Security.Cryptography.RSAOpenSsl, funcionavam no macOS se o OpenSSL estava disponível.

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

Novo comportamento

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

AesCcm gera uma PlatformNotSupportedException exceção.

Tipo de mudança disruptiva

Essa é uma mudança comportamental.

Motivo da alteração

O suporte para os primitivos com suporte openSSL originou-se do .NET Core 1.0, onde a criptografia no macOS foi implementada com o OpenSSL. Isso não foi ideal porque uma versão recente do OpenSSL não vem no macOS, e adquirir e configurar o OpenSSL no macOS foi problemático. No período do .NET Core 2.0, a criptografia foi movida para a funcionalidade interna da Apple, portanto, a funcionalidade criptográfica "simplesmente funcionou" sem a necessidade de adquirir nenhum componente adicional.

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

O suporte a esses primitivos com suporte do OpenSSL no macOS tornou-se mais difícil, pois a Apple tornou mais difícil carregar bibliotecas de determinados caminhos e complica a distribuição de software no macOS.

Se você estiver usando primitivos com suporte do OpenSSL sem qualquer intenção específica de usar o 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 um primitivo criptográfico diferente, como System.Security.Cryptography.AesGcm, em vez disso.

APIs afetadas