OpenSSL-kryptografiska primitiver stöds inte på macOS

Från och med .NET 10 stöds inte längre OpenSSL-understödda kryptografiska primiter på macOS. System.Security.Cryptography.AesCcm och klasser som är specifika för OpenSSL, till exempel System.Security.Cryptography.RSAOpenSsl, kastar nu en PlatformNotSupportedException på macOS.

Version lanserad

.NET 10

Tidigare beteende

Tidigare arbetade klasser som är specifika för OpenSSL, till exempel System.Security.Cryptography.RSAOpenSsl, på macOS om OpenSSL var tillgängligt.

System.Security.Cryptography.AesCcm fungerade på macOS om OpenSSL var tillgängligt.

Nytt beteende

Från och med .NET 10 fungerar klasser som är specifika för OpenSSL, till exempel RSAOpenSsl, inte på macOS även om OpenSSL är tillgängligt och ett PlatformNotSupportedException undantag genereras.

AesCcm genererar ett PlatformNotSupportedException undantag.

Typ av brytande ändring

Det här är en beteendeförändring.

Orsak till ändring

Stöd för OpenSSL-stödda primitiver kommer från .NET Core 1.0, där kryptografi på macOS implementerades med OpenSSL. Detta var inte idealiskt eftersom en ny version av OpenSSL inte finns på macOS, och det var besvärligt att skaffa och konfigurera OpenSSL på macOS. Inom tidsramen för .NET Core 2.0 flyttades kryptografi till Apples inbyggda funktioner, så kryptografiska funktioner "fungerade bara" utan att behöva hämta några ytterligare komponenter.

De typer som har suffixet OpenSsl lämnades som implementerade av OpenSSL, och AesCcm har ingen implementering i Apples kryptografiska bibliotek.

Att stödja dessa OpenSSL-stödda primitiver på macOS har blivit svårare eftersom Apple har gjort det svårare att läsa in bibliotek från vissa vägar, och det komplicerar distributionen av programvara på macOS.

Om du använder OpenSSL-backade primitiver utan någon specifik avsikt att använda OpenSSL är rekommendationen att använda de fabriker som tillhandahåller en macOS-implementering:

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

System.Security.Cryptography.AesCcm har ingen funktionell motsvarighet på macOS. Överväg att använda en annan kryptografisk primitiv, till exempel System.Security.Cryptography.AesGcm, i stället.

Berörda API:er