SYSLIB0057: konstruktory X509Certificate2 i X509Certificate dla zawartości binarnej i plików są przestarzałe
Konstruktory włączone X509Certificate i X509Certificate2 akceptujące zawartość jako ścieżkę byte[]
pliku lub ReadOnlySpan<byte>
string
, są przestarzałe, począwszy od platformy .NET 9. Import Metody w środowisku X509Certificate2Collection są również przestarzałe. Wywołanie ich w kodzie generuje ostrzeżenie SYSLIB0057
w czasie kompilacji.
Przyczyna obsoletionu
Interfejsy API, których dotyczy problem, obsługują ładowanie certyfikatów w wielu formatach. Na przykład new X509Certificate2(data)
załadowano certyfikat z byte[]
o nazwie data
. data
może być jednym z dowolnego obsługiwanego formatu, w tym X.509, PKCS7 lub PKCS12/PFX.
Chociaż ta metoda była łatwa w użyciu, spowodowała problemy polegające na tym, że dane dostarczone przez użytkownika były przekazywane w innym formacie niż zamierzone. Może to umożliwić ładowanie PKCS12, w którym ładowana była tylko zawartość X.509. Może też spowodować problemy ze współdziałaniem z obsługi danych na różne sposoby.
Rozwiązanie
Użyj innego interfejsu API, aby załadować zawartość certyfikatu w zależności od zamierzonego typu zawartości.
Nową klasę o nazwie X509CertificateLoader
można użyć do załadowania zawartości X.509 lub PKCS12:
- Jeśli ładujesz zawartość X.509, użyj polecenia
X509CertificateLoader.LoadCertificate
lubX509CertificateLoader.LoadCertificateFromFile
. - Jeśli ładujesz zawartość PKCS12, użyj polecenia
X509CertificateLoader.LoadPkcs12
,X509CertificateLoader.LoadPkcs12FromFile
,X509CertificateLoader.LoadPkcs12Collection
lubX509CertificateLoader.LoadPkcs12CollectionFromFile
. - Jeśli ładujesz zawartość PKCS7, użyj SignedCms pakietu System.Security.Cryptography.Pkcs, aby sprawdzić certyfikaty w zawartości PKCS7.
- Jeśli nie masz pewności co do ładowanych typów zawartości, użyj polecenia GetCertContentType , aby określić typ zawartości i wywołać odpowiedni interfejs API.
Pakiety Microsoft.Bcl.Cryptography są dostarczane X509CertificateLoader
dla programów .NET Framework i .NET Standard.
Pomijanie ostrzeżenia
Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.
Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.
// Disable the warning.
#pragma warning disable SYSLIB0057
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0057
Aby pominąć wszystkie SYSLIB0057
ostrzeżenia w projekcie, dodaj <NoWarn>
właściwość do pliku projektu.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
</PropertyGroup>
</Project>
Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.