Partilhar via


SYSLIB0057: Os 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 string arquivo são obsoletos, começando no .NET 9. Os Import métodos em X509Certificate2Collection também são obsoletos. Chamá-los em código gera aviso SYSLIB0057 em tempo de compilação.

Motivo da obsolescência

As APIs afetadas suportavam o carregamento de certificados em vários formatos. Por exemplo, new X509Certificate2(data) carregou um certificado de um byte[] chamado data. data pode ser um de qualquer formato suportado, 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 com um formato diferente do pretendido. Isso pode permitir o carregamento do PKCS12 onde apenas o conteúdo X.509 deveria ser carregado. Ou pode criar problemas de interoperabilidade ao lidar com os dados de maneiras diferentes.

Solução

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

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

  • Se você estiver carregando conteúdo X.509, use X509CertificateLoader.LoadCertificate ou X509CertificateLoader.LoadCertificateFromFile.
  • Se você estiver carregando conteúdo PKCS12, use X509CertificateLoader.LoadPkcs12, X509CertificateLoader.LoadPkcs12FromFile, X509CertificateLoader.LoadPkcs12Collectionou X509CertificateLoader.LoadPkcs12CollectionFromFile.
  • Se você estiver carregando conteúdo PKCS7, use SignedCms o pacote System.Security.Cryptography.Pkcs para inspecionar certificados no conteúdo PKCS7.
  • Se você 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 apropriada.

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

Suprimir um aviso

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

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar 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 SYSLIB0057 avisos em seu projeto, adicione uma <NoWarn> propriedade ao seu arquivo de projeto.

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

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