Compartir a través de


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 o X509CertificateLoader.LoadCertificateFromFile.
  • Si va a cargar contenido PKCS12, use X509CertificateLoader.LoadPkcs12, X509CertificateLoader.LoadPkcs12FromFile, X509CertificateLoader.LoadPkcs12Collection o X509CertificateLoader.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.