SYSLIB0057: los constructores X509Certificate2 y X509Certificate para el contenido binario y del archivo están obsoletos
Los constructores de X509Certificate y X509Certificate2 que aceptan contenido como byte[]
, ReadOnlySpan<byte>
o una ruta de acceso de archivo de string
están obsoletos, a partir de .NET 9. Los métodos Import en X509Certificate2Collection también están obsoletos. Si se los llama en el código, se genera la advertencia SYSLIB0057
en tiempo de compilación.
Motivo de la obsolescencia
Las API afectadas admiten la carga de certificados en varios formatos. Por ejemplo, new X509Certificate2(data)
cargado un certificado desde un byte[]
denominado data
. data
podría ser uno de los formatos admitidos, incluidos X.509, PKCS7 o PKCS12/PFX.
Aunque este método era fácil de usar, creó problemas en los que los datos proporcionados por el usuario se pasaron con un formato diferente al previsto. Esto podría permitir la carga de PKCS12, donde solo se pretendía cargar contenido X.509. O bien, podría crear problemas de interoperabilidad para controlar los datos de maneras diferentes.
Solución alternativa
Use otra API para cargar el contenido del certificado, en función del tipo de contenido previsto.
Se puede usar una nueva clase denominada X509CertificateLoader
para cargar contenido X.509 o PKCS12:
- Si va a cargar contenido X.509, use
X509CertificateLoader.LoadCertificate
oX509CertificateLoader.LoadCertificateFromFile
. - Si va a cargar contenido PKCS12, use
X509CertificateLoader.LoadPkcs12
,X509CertificateLoader.LoadPkcs12FromFile
,X509CertificateLoader.LoadPkcs12Collection
oX509CertificateLoader.LoadPkcs12CollectionFromFile
. - Si va a cargar contenido PKCS7, use SignedCms desde el paquete System.Security.Cryptography.Pkcs para inspeccionar los certificados en el contenido de PKCS7.
- Si no está seguro del tipo de contenido que está cargando, use GetCertContentType para determinar el tipo de contenido y llamar a la API adecuada.
El paquete Microsoft.Bcl.Cryptography proporciona X509CertificateLoader
para .NET Framework y .NET Standard.
Supresión de una advertencia
Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.
Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.
// Disable the warning.
#pragma warning disable SYSLIB0057
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0057
Para suprimir todas las advertencias SYSLIB0057
del proyecto, agregue una propiedad <NoWarn>
al archivo del proyecto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0057</NoWarn>
</PropertyGroup>
</Project>
Para obtener más información, vea Suprimir advertencias.