Compartilhar via


SYSLIB0057: construtores X509Certificate2 e X509Certificate para conteúdo binário e de arquivo estão obsoletos

Os construtores em X509Certificate e X509Certificate2 que aceitam conteúdo como um byte[], ReadOnlySpan<byte> ou um caminho de arquivo string estão obsoletos, a partir do .NET 9. Os métodos Import no X509Certificate2Collection também estão obsoletos. Chamá-los no código gera aviso SYSLIB0057 em tempo de compilação.

Motivo da obsolescência

As APIs afetadas dão suporte ao carregamento de certificados em diversos formatos. Por exemplo, new X509Certificate2(data) carregou um certificado de um byte[] chamado data. data pode ser um dos formatos com suporte, incluindo X.509, PKCS7 ou PKCS12/PFX.

Embora esse método fosse fácil de usar, ele criava problemas em que os dados fornecidos pelo usuário eram passados em um formato diferente do pretendido. Isso pode permitir o carregamento de PKCS12, quando apenas o conteúdo X.509 deveria ser carregado. Ou pode criar problemas de interoperabilidade por lidar com os dados de maneiras diferentes.

Solução alternativa

Use uma API diferente para carregar o conteúdo do certificado, dependendo do tipo de conteúdo desejado.

Uma nova classe chamada X509CertificateLoader pode ser usada para carregar conteúdo X.509 ou PKCS12:

  • Se estiver carregando conteúdo X.509, use X509CertificateLoader.LoadCertificate ou X509CertificateLoader.LoadCertificateFromFile.
  • Se estiver carregando conteúdo PKCS12, use X509CertificateLoader.LoadPkcs12, X509CertificateLoader.LoadPkcs12FromFile, X509CertificateLoader.LoadPkcs12Collection ou X509CertificateLoader.LoadPkcs12CollectionFromFile.
  • Se estiver carregando conteúdo PKCS7, use SignedCms do pacote System.Security.Cryptography.Pkcs para inspecionar certificados no conteúdo PKCS7.
  • Se não tiver certeza sobre o tipo de conteúdo que está carregando, use GetCertContentType para determinar o tipo de conteúdo e chamar a API adequada.

O pacote Microsoft.Bcl.Cryptography fornece X509CertificateLoader para .NET Framework e .NET Standard.

Suprimir um aviso

Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0057

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0057

Para suprimir todos os avisos SYSLIB0057 no projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, confira Suprimir avisos.