SYSLIB0057: i costruttori X509Certificate2 e X509Certificate per il contenuto binario e di file sono obsoleti
I costruttori di X509Certificate e X509Certificate2 che accettano il contenuto come byte[]
, ReadOnlySpan<byte>
o un percorso di file string
sono obsoleti, a partire da .NET 9. Anche i metodi Import di X509Certificate2Collection sono obsoleti. La loro chiamata nel codice genera un avviso SYSLIB0057
in fase di compilazione.
Motivo dell'obsolescenza
Le API interessate supportano il caricamento dei certificati in più formati. Ad esempio, new X509Certificate2(data)
ha caricato un certificato da byte[]
, denominato data
. data
può essere uno dei formati supportati, tra cui X.509, PKCS7 o PKCS12/PFX.
Anche se questo metodo è risultato facile da usare, ha creato problemi in cui i dati forniti dall'utente sono stati passati con un formato diverso da quello previsto. Ciò potrebbe permettere di caricare PKCS12, laddove si intendeva caricare solo il contenuto X.509. Oppure potrebbe creare dei problemi di interoperabilità dovuti alla gestione dei dati in modi diversi.
Soluzione alternativa
Usare un'API diversa per caricare il contenuto del certificato, a seconda del tipo di contenuto previsto.
Una nuova classe chiamata X509CertificateLoader
può essere usata per caricare il contenuto X.509 o PKCS12:
- Se si carica il contenuto X.509, usare
X509CertificateLoader.LoadCertificate
oX509CertificateLoader.LoadCertificateFromFile
. - Se si carica il contenuto PKCS12, usare
X509CertificateLoader.LoadPkcs12
,X509CertificateLoader.LoadPkcs12FromFile
X509CertificateLoader.LoadPkcs12Collection
, oX509CertificateLoader.LoadPkcs12CollectionFromFile
. - Se si carica il contenuto PKCS7, usare SignedCms dal pacchetto System.Security.Cryptography.Pkcs per controllare i certificati nel contenuto PKCS7.
- Se non si è certi del tipo di contenuto che si sta caricando, usare GetCertContentType per determinare il tipo di contenuto e chiamare l'API appropriata.
Il pacchetto Microsoft.Bcl.Cryptography fornisce X509CertificateLoader
.NET Framework e .NET Standard.
Eliminare un avviso
Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.
Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.
// Disable the warning.
#pragma warning disable SYSLIB0057
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0057
Per eliminare tutti gli avvisi SYSLIB0057
nel progetto, aggiungere una proprietà <NoWarn>
al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Non visualizzare gli avvisi.