Использование 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, я верю.

https://blogs.msdn.microsoft.com/vijaysk/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-identity/

Может быть это полезно для вас; На локальном попробуйте:

X509Certificate2 pc = new X509Certificate2(strFileName, strPassword);
Другие вопросы по тегам