Compartir a través de


No se admiten primitivos criptográficos openSSL en macOS

A partir de .NET 10, los primitivos criptográficos respaldados por OpenSSL ya no se admiten en macOS. System.Security.Cryptography.AesCcm y las clases específicas de OpenSSL, como System.Security.Cryptography.RSAOpenSsl, ahora arrojan una PlatformNotSupportedException en macOS.

Versión introducida

.NET 10

Comportamiento anterior

Anteriormente, las clases específicas de OpenSSL, como System.Security.Cryptography.RSAOpenSsl, funcionaban en macOS si OpenSSL estaba disponible.

System.Security.Cryptography.AesCcm trabajó en macOS si OpenSSL estaba disponible.

Nuevo comportamiento

A partir de .NET 10, las clases específicas de OpenSSL, como RSAOpenSsl, no funcionan en macOS incluso si OpenSSL está disponible y se produce una PlatformNotSupportedException excepción.

AesCcm produce una PlatformNotSupportedException excepción.

Tipo de cambio disruptivo

Se trata de un cambio de comportamiento .

Motivo del cambio

La compatibilidad con las primitivas respaldadas por OpenSSL se originó en .NET Core 1.0, donde se implementó la criptografía en macOS con OpenSSL. Esto no era ideal porque una versión reciente de OpenSSL no viene en macOS y la adquisición y configuración de OpenSSL en macOS era problemático. En el período de tiempo de .NET Core 2.0, la criptografía se movió a la funcionalidad integrada de Apple, por lo que la funcionalidad criptográfica "acaba de funcionar" sin necesidad de adquirir componentes adicionales.

Los tipos que están sufijados como OpenSsl se dejaron para que los implementara OpenSSL y AesCcm no tienen una implementación en las bibliotecas criptográficas de Apple.

Admitir estos primitivos respaldados por OpenSSL en macOS se ha vuelto más difícil, ya que Apple ha hecho que sea más difícil cargar bibliotecas desde determinadas rutas de acceso y complica la distribución de software en macOS.

Si usa primitivos respaldados por OpenSSL sin ninguna intención específica de usar OpenSSL, la recomendación es usar las fábricas que proporcionan una implementación de macOS:

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

System.Security.Cryptography.AesCcm no tiene ningún equivalente funcional en macOS. Considere la posibilidad de usar un primitivo criptográfico diferente, como System.Security.Cryptography.AesGcm, en su lugar.

Las APIs afectadas