Мы используем компонент System.Security.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:\Users\I25266\Source\Repos\common utils feature b\telematics.commonutilities\Telematics.CommonUtilities\Services\RSACryptoService.cs:line 383
Тот же подход прекрасно работает с открытым ключом, и этот же закрытый ключ можно успешно использовать с BouncyCastle. Я также пробовал метод X509Certificate2Collection Import() - та же ошибка. Несмотря на то, что у нас есть обходной путь, я хотел бы использовать собственные компоненты .Net.
Любое предложение или объяснение будет очень приветствоваться.
Спасибо Crypt32 за ответ и разъяснения - я признаю, что в моем понимании есть пробел. Меня интересует использование компонентов фреймворка вместо BouncyCastle для расшифровки с помощью закрытого ключа (массив байтов, загруженный из внешнего хранилища, а не из файла). Документация (включая ту, на которую вы ссылаетесь) и сообщения, которые я прочитал, не указывают на краткий подход к этому. У Вас есть какие-то предложения?





X509Certificate2(Byte[])конструктор ожидает открытый сертификат, а не закрытый ключ. Вы пробовали читать документацию: docs.microsoft.com/en-us/dotnet/api/…?