#.net-core #x509certificate2
#.net-core #x509certificate2
Вопрос:
Мы используем систему.Безопасность.Компонент Cryptography.X509Certificates в приложении .Net Core и запуск этой ошибки при попытке загрузить закрытый ключ. Единственная функциональность, которая нам нужна для сертификата, — это расшифровать строку и проверить значение notAfter. Строка кода, в которой возникает ошибка, является:
var cert = new X509Certificate2(privateKeyByteArr);
Исключение:
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException
HResult=0x80092009
Message=Cannot find the requested object
Source=System.Security.Cryptography.X509Certificates Cannot find the requested object
StackTrace:
at Internal.Cryptography.Pal.CertificatePal.FromBlobOrFile(Byte[] rawData, String fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData)
at Telematics.CommonUtilities.Services.RSACryptoService.DecryptKey(String key, Byte[] privateKeyByteArr) in D:UsersI25266SourceReposcommon utils feature btelematics.commonutilitiesTelematics.CommonUtilitiesServicesRSACryptoService.cs:line 383
Тот же подход отлично работает с открытым ключом, и этот же закрытый ключ может быть успешно использован с BouncyCastle. Я также пробовал метод импорта X509Certificate2Collection() — та же ошибка. Несмотря на то, что у нас есть обходной путь, я бы хотел использовать собственные компоненты .Net.
Любые предложения или объяснения были бы очень желательны.
Комментарии:
1.
X509Certificate2(Byte[])
конструктор ожидает открытый сертификат, а не закрытый ключ. Вы пытались прочитать документацию: learn.microsoft.com/en-us/dotnet/api /… ?2. Спасибо Crypt32 за ответ и разъяснения — я признаю, что в моем понимании есть пробел. Я заинтересован в использовании компонентов фреймворка вместо BouncyCastle для расшифровки с помощью закрытого ключа (массива байтов, загруженного из внешнего хранилища, а не файла). Документация (включая ту, на которую вы ссылаетесь) и сообщения, которые я прочитал, не указывают на краткий подход к выполнению этого. У вас есть какие-либо предложения?