Condividi tramite


Primitive di crittografia OpenSSL non supportate su macOS

A partire da .NET 10, le primitive crittografiche supportate da OpenSSL non sono più supportate in macOS. System.Security.Cryptography.AesCcm e classi specifiche di OpenSSL, ad esempio System.Security.Cryptography.RSAOpenSsl, ora generano un'eccezione PlatformNotSupportedException su macOS.

Versione introdotta

.NET 10

Comportamento precedente

In precedenza, le classi specifiche di OpenSSL, ad esempio System.Security.Cryptography.RSAOpenSsl, funzionavano in macOS se OpenSSL era disponibile.

System.Security.Cryptography.AesCcm ha lavorato su macOS se OpenSSL era disponibile.

Nuovo comportamento

A partire da .NET 10, le classi specifiche di OpenSSL, ad esempio RSAOpenSsl, non funzionano in macOS anche se OpenSSL è disponibile e viene generata un'eccezione PlatformNotSupportedException .

AesCcm genera un'eccezione PlatformNotSupportedException .

Tipo di cambiamento che interrompe la compatibilità

Si tratta di una modifica comportamentale .

Motivo della modifica

Il supporto per le primitive supportate da OpenSSL ha origine da .NET Core 1.0, in cui la crittografia in macOS È stata implementata con OpenSSL. Questo non era l'ideale perché una versione recente di OpenSSL non è disponibile in macOS e l'acquisizione e la configurazione di OpenSSL in macOS era problematico. Nell'intervallo di tempo di .NET Core 2.0, la crittografia è stata spostata nella funzionalità predefinita di Apple, quindi la funzionalità di crittografia "funzionava" senza dover acquisire componenti aggiuntivi.

I tipi che hanno il suffisso OpenSsl sono lasciati come implementati da OpenSSL e AesCcm non hanno un'implementazione nelle librerie di crittografia di Apple.

Il supporto di queste primitive basate su OpenSSL in macOS è diventato più difficile perché Apple ha reso più difficile caricare librerie da determinati percorsi e complica la distribuzione del software in macOS.

Se si usano primitive basate su OpenSSL senza alcuna intenzione specifica di usare OpenSSL, è consigliabile usare le factory che forniscono un'implementazione macOS:

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

System.Security.Cryptography.AesCcm non ha un equivalente funzionale in macOS. Prendere in considerazione l'uso di una primitiva crittografica diversa, ad esempio System.Security.Cryptography.AesGcm, .

Le API interessate