Использование X509Certificate2 для получения PrivateKey вызывает CryptographicException "Указан неверный тип поставщика"
Каждый,
Я разрабатываю веб-приложение, которое использует X509Certificate2 для получения закрытого ключа из файла сертификации. Фрагмент кода выглядит следующим образом:
public static RSACryptoServiceProvider GetSignProviderFromPfx()
{
var strFileName = "c:\cer\mycerfile.pfx";
var strPassword = "000000";
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword, X509KeyStorageFlags.MachineKeySet);
var ThePivateKey = pc.PrivateKey;
return (RSACryptoServiceProvider)ThePivateKey;
}
Но оператор pc.Privatekey вызывает System.Security.Cryptography.CryptographicException "Указан неверный тип поставщика" . Я уверен, что у файла сертификации нет проблем, у него действительно есть закрытый ключ. И свойство pc.HasPrivateKey также возвращает true.
Среда тестирования VS2013, окно 7.
Я также попробовал следующее:
а. Я отладил его в VS2013 с iis express, проблема произошла.
б. Я отладил его на другом компьютере с той же средой, что и у меня, проблема также возникла.
с. Я опубликовал приложение на сервере с iis, работающим на Windows Web Server 2008 R2, оно работало нормально.
д. Я опубликовал приложение на веб-сайте Azure вдов, оно также работало нормально.
Поэтому я думаю, что фрагмент кода не имеет проблем. Основная причина, по которой возникает исключение, заключается в том, что могут быть некоторые проблемы с запущенной средой. Я проверил и сравнил право чтения / записи в файле сертификации в разных средах, все они одинаковы.
Кто-нибудь может помочь?
Благодарю.
2 ответа
У меня была та же проблема, и это то, что я сделал, чтобы решить ее. Надеюсь, это вам тоже поможет.
Нам пришлось установить для параметра "Загрузить профиль пользователя" значение True в расширенных настройках пулов приложений.
Вы также можете установить его в web.config, я верю.
Может быть это полезно для вас; На локальном попробуйте:
X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);