Поделиться через


SYSLIB0057: конструкторы X509Certificate2 и X509Certificate для двоичного и файлового содержимого устарели

Конструкторы X509Certificate и X509Certificate2 принимаюющие содержимое в качестве byte[]пути ReadOnlySpan<byte>string к файлу устарели, начиная с .NET 9. Методы Import x509Certificate2Collection также устарели. При вызове их в коде выдается предупреждение SYSLIB0057 во время компиляции.

Причина обсоления

Затронутые API поддерживают загрузку сертификатов в нескольких форматах. Например, new X509Certificate2(data) загружается сертификат из вызываемого byte[] data. data может быть одним из поддерживаемых форматов, включая X.509, PKCS7 или PKCS12/PFX.

Хотя этот метод был прост в использовании, он создал проблемы, в которых предоставленные пользователем данные передаются с другим форматом, отличным от предполагаемого. Это может позволить загружать PKCS12, где было загружено только содержимое X.509. Кроме того, это может привести к проблемам взаимодействия при обработке данных разными способами.

Обходное решение

Используйте другой API для загрузки содержимого сертификата в зависимости от предполагаемого типа контента.

Для загрузки содержимого X.509 или PKCS12 можно использовать новый класс X509CertificateLoader :

  • Если вы загружаете содержимое X.509, используйте X509CertificateLoader.LoadCertificate или X509CertificateLoader.LoadCertificateFromFile.
  • Если вы загружаете содержимое PKCS12, используете X509CertificateLoader.LoadPkcs12, X509CertificateLoader.LoadPkcs12CollectionX509CertificateLoader.LoadPkcs12FromFileили X509CertificateLoader.LoadPkcs12CollectionFromFile.
  • Если вы загружаете содержимое PKCS7, используйте SignedCms пакет System.Security.Cryptography.Pkcs для проверки сертификатов в содержимом PKCS7.
  • Если вы не уверены в типе контента, который вы загружаете, используйте GetCertContentType для определения типа контента и вызова соответствующего API.

Пакет шифрования Microsoft.Bcl.Cryptography предоставляется X509CertificateLoader для платформа .NET Framework и .NET Standard.

Отключение предупреждений

Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.

Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.

// Disable the warning.
#pragma warning disable SYSLIB0057

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0057

Чтобы отключить все SYSLIB0057 предупреждения в проекте, добавьте <NoWarn> свойство в файл проекта.

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

Дополнительные сведения см. в разделе Отключение предупреждений.