SYSLIB0057: X509Certificate2 och X509Certificate-konstruktorer för binärt och filinnehåll är föråldrade
Konstruktorerna på X509Certificate och X509Certificate2 som accepterar innehåll som en byte[]
, ReadOnlySpan<byte>
eller en string
filsökväg är föråldrade, med början i .NET 9. Metoderna Import på X509Certificate2Collection är också föråldrade. Att anropa dem i kod genererar en varning SYSLIB0057
vid kompileringstillfället.
Orsak till obsoletion
De berörda API:erna som stöds för inläsning av certifikat i flera format. Till exempel new X509Certificate2(data)
lästes ett certifikat från ett byte[]
med namnet data
. data
kan vara ett av alla format som stöds, inklusive X.509, PKCS7 eller PKCS12/PFX.
Även om den här metoden var lätt att använda skapade den problem där användarangivna data skickades med ett annat format än avsett. Detta kan tillåta inläsning av PKCS12 där endast X.509-innehåll var avsett att läsas in. Eller så kan det skapa samverkansproblem från hantering av data på olika sätt.
Lösning
Använd ett annat API för att läsa in certifikatinnehåll, beroende på den avsedda innehållstypen.
En ny klass med namnet X509CertificateLoader
kan användas för att läsa in X.509- eller PKCS12-innehåll:
- Om du läser in X.509-innehåll använder du
X509CertificateLoader.LoadCertificate
ellerX509CertificateLoader.LoadCertificateFromFile
. - Om du läser in PKCS12-innehåll använder du
X509CertificateLoader.LoadPkcs12
,X509CertificateLoader.LoadPkcs12FromFile
,X509CertificateLoader.LoadPkcs12Collection
, ellerX509CertificateLoader.LoadPkcs12CollectionFromFile
. - Om du läser in PKCS7-innehåll använder SignedCms du från paketet System.Security.Cryptography.Pkcs för att inspektera certifikat i PKCS7-innehåll.
- Om du är osäker på vilken innehållstyp du läser in använder GetCertContentType du för att fastställa innehållstypen och anropa rätt API.
Microsoft.Bcl.Cryptography-paketet tillhandahåller X509CertificateLoader
.NET Framework och .NET Standard.
Ignorera en varning
Om du måste använda föråldrade API:er kan du ignorera varningen i koden eller i projektfilen.
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.
// Disable the warning.
#pragma warning disable SYSLIB0057
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0057
Om du vill ignorera alla SYSLIB0057
varningar i projektet lägger du till en <NoWarn>
egenskap i projektfilen.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
</PropertyGroup>
</Project>
Mer information finns i Utelämna varningar.