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.LoadPkcs12Collection
X509CertificateLoader.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>
Дополнительные сведения см. в разделе Отключение предупреждений.