Dela via


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 eller X509CertificateLoader.LoadCertificateFromFile.
  • Om du läser in PKCS12-innehåll använder du X509CertificateLoader.LoadPkcs12, X509CertificateLoader.LoadPkcs12FromFile, X509CertificateLoader.LoadPkcs12Collection, eller X509CertificateLoader.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.