У меня есть сертификат, который я пытаюсь загрузить в .net. Я заметил, что в .net 9 конструктор x509Certificate2 был устарел в пользу x509CertificateLoader . Таким образом, чтобы подготовиться к этому (все еще в .net 7) я вытащил в пакете Microsoft.bcl.cryptography и попробовал использовать этот класс. Тем не менее, x509certificateLoader не выполняет, если я не предоставлю очень приключенческое значение конфигурации:
// works
cert = X509CertificateLoader.LoadPkcs12FromFile(certPath, clientId, loaderLimits: Pkcs12LoaderLimits.DangerousNoLimits);
// throws CryptographicException
cert = X509CertificateLoader.LoadPkcs12FromFile(certPath, clientId);
< /code>
Stacktrace: < /p>
at System.Security.Cryptography.NetStandardShims.TryGetHashAndReset(IncrementalHash hash, Span`1 destination, Int32& bytesWritten)
at System.Security.Cryptography.Asn1.Pkcs12.PfxAsn.VerifyMac(ReadOnlySpan`1 macPassword, ReadOnlySpan`1 authSafeContents)
at System.Security.Cryptography.X509Certificates.X509CertificateLoader.ReadCertsAndKeys(BagState& bagState, ReadOnlyMemory`1 data, ReadOnlySpan`1& password, Pkcs12LoaderLimits loaderLimits)
at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12(ReadOnlyMemory`1 data, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits)
at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadFromFile[T](String path, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits, LoadFromFileFunc`1 loader)
at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12FromFile(String path, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits)
at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12FromFile(String path, String password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits)
tancentially, я не могу выяснить, как происходит это исключение, так как этот код должен заставить Hashalgorithm быть одним из этих значений, тем самым избегая строки, где это исключение брошено Полем Но, в любом случае, как задокументировано, эта настройка PKCS12loaderLimits.dangeSucyNolimits заставляет загрузчик следовать по другому пути кода, что позволяет избежать проблемы. Просто изменение пределов загрузчика, чтобы иметь аналогичные параметры на pkcs12loaderlimits.danguessnolimits Не решают проблему. Что я рискую, используя этот вариант? Вероятно, есть что -то в самом файле сертификата, что делает его несовместимым с настройками по умолчанию? Что -то, что я мог бы изменить, чтобы мне не пришлось использовать «опасную» отсутствие фильтрации?
У меня есть сертификат, который я пытаюсь загрузить в .net. Я заметил, что в .net 9 конструктор x509Certificate2 был устарел в пользу x509CertificateLoader . Таким образом, чтобы подготовиться к этому (все еще в .net 7) я вытащил в пакете Microsoft.bcl.cryptography и попробовал использовать этот класс. Тем не менее, x509certificateLoader не выполняет, если я не предоставлю очень приключенческое значение конфигурации: [code]// works cert = X509CertificateLoader.LoadPkcs12FromFile(certPath, clientId, loaderLimits: Pkcs12LoaderLimits.DangerousNoLimits); // throws CryptographicException cert = X509CertificateLoader.LoadPkcs12FromFile(certPath, clientId); < /code> Stacktrace: < /p> at System.Security.Cryptography.NetStandardShims.TryGetHashAndReset(IncrementalHash hash, Span`1 destination, Int32& bytesWritten) at System.Security.Cryptography.Asn1.Pkcs12.PfxAsn.VerifyMac(ReadOnlySpan`1 macPassword, ReadOnlySpan`1 authSafeContents) at System.Security.Cryptography.X509Certificates.X509CertificateLoader.ReadCertsAndKeys(BagState& bagState, ReadOnlyMemory`1 data, ReadOnlySpan`1& password, Pkcs12LoaderLimits loaderLimits) at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12(ReadOnlyMemory`1 data, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits) at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadFromFile[T](String path, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits, LoadFromFileFunc`1 loader) at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12FromFile(String path, ReadOnlySpan`1 password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits) at System.Security.Cryptography.X509Certificates.X509CertificateLoader.LoadPkcs12FromFile(String path, String password, X509KeyStorageFlags keyStorageFlags, Pkcs12LoaderLimits loaderLimits) [/code] tancentially, я не могу выяснить, как происходит это исключение, так как этот код должен заставить Hashalgorithm быть одним из этих значений, тем самым избегая строки, где это исключение брошено Полем Но, в любом случае, как задокументировано, эта настройка PKCS12loaderLimits.dangeSucyNolimits заставляет загрузчик следовать по другому пути кода, что позволяет избежать проблемы. Просто изменение пределов загрузчика, чтобы иметь аналогичные параметры на pkcs12loaderlimits.danguessnolimits Не решают проблему. Что я рискую, используя этот вариант? Вероятно, есть что -то в самом файле сертификата, что делает его несовместимым с настройками по умолчанию? Что -то, что я мог бы изменить, чтобы мне не пришлось использовать «опасную» отсутствие фильтрации?