Udostępnij przez


Kryptograficzne elementy pierwotne openSSL nie są obsługiwane w systemie macOS

Począwszy od platformy .NET 10, kryptograficzne elementy pierwotne oparte na systemie OpenSSL nie są już obsługiwane w systemie macOS. System.Security.Cryptography.AesCcm i klasy specyficzne dla protokołu OpenSSL, takie jak System.Security.Cryptography.RSAOpenSsl, teraz zgłaszają element PlatformNotSupportedException w systemie macOS.

Wersja wprowadzona

.NET 10

Poprzednie zachowanie

Wcześniej klasy specyficzne dla protokołu OpenSSL, takie jak System.Security.Cryptography.RSAOpenSsl, działały w systemie macOS, jeśli biblioteka OpenSSL była dostępna.

System.Security.Cryptography.AesCcm działał w systemie macOS, jeśli biblioteka OpenSSL była dostępna.

Nowe zachowanie

Od wersji .NET 10, klasy specyficzne dla OpenSSL, takie jak RSAOpenSsl, nie działają w systemie macOS, nawet jeśli OpenSSL jest dostępny, i wyrzucany jest wyjątek PlatformNotSupportedException.

AesCcm zgłasza wyjątek PlatformNotSupportedException .

Typ zmiany przełamującej

Jest to zmiana zachowania.

Przyczyna zmiany

Obsługa elementów pierwotnych opartych na technologii OpenSSL pochodzi z platformy .NET Core 1.0, gdzie kryptografia w systemie macOS została zaimplementowana za pomocą biblioteki OpenSSL. Nie było to idealne rozwiązanie, ponieważ najnowsza wersja biblioteki OpenSSL nie jest dostępna w systemie macOS, a uzyskiwanie i konfigurowanie biblioteki OpenSSL w systemie macOS było kłopotliwe. W przedziale czasowym platformy .NET Core 2.0 kryptografia została przeniesiona do wbudowanych funkcji firmy Apple, więc funkcje kryptograficzne "po prostu zadziałały" bez konieczności uzyskiwania dodatkowych składników.

Typy z sufiksami OpenSsl zostały zaimplementowane przez OpenSSL, a AesCcm nie mają implementacji w bibliotekach kryptograficznych Apple.

Obsługa tych prymitywów wspieranych przez OpenSSL w systemie macOS stała się trudniejsza, ponieważ firma Apple utrudniła ładowanie bibliotek z niektórych ścieżek, co skomplikowało dystrybucję oprogramowania w systemie macOS.

Jeśli używasz prymitywów kryptograficznych opartych na OpenSSL bez konkretnego zamiaru korzystania z OpenSSL, zaleca się użycie fabryk, które oferują implementację kompatybilną z macOS.

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

System.Security.Cryptography.AesCcm nie ma odpowiednika funkcjonalnego w systemie macOS. Rozważ użycie innego kryptograficznego elementu pierwotnego, takiego jak System.Security.Cryptography.AesGcm, zamiast tego.

Interfejsy API, których dotyczy problem