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