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
ouX509CertificateLoader.LoadCertificateFromFile
. - Se estiver carregando conteúdo PKCS12, use
X509CertificateLoader.LoadPkcs12
,X509CertificateLoader.LoadPkcs12FromFile
,X509CertificateLoader.LoadPkcs12Collection
ouX509CertificateLoader.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.