RSACryptoServiceProvider Система CryptographicException не может найти файл, указанный в ASP.NET

У меня есть приложение, которое использует RSACryptoServiceProvider для дешифрования некоторых данных с использованием известного закрытого ключа (хранится в переменной).

Когда пул приложений IIS настроен на использование сетевой службы, все работает нормально.

Однако, когда мы настраиваем пул приложений IIS для запуска кода под другим удостоверением, мы получаем следующее:

System.Security.Cryptography.CryptographicException: The system cannot find the file specified.

   at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
   at System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters(RSAParameters parameters)
   at System.Security.Cryptography.RSA.FromXmlString(String xmlString)

Код выглядит примерно так:

byte[] input; 
byte[] output; 
string private_key_xml; 

var provider = new System.Cryptography.RSACryptoServiceProvider(this.m_key.Key_Size);
provider.FromXmlString(private_key_xml); // Fails Here when Application Pool Identity != Network Service

ouput = provider.Decrypt(input, false); // False = Use PKCS#1 v1.5 Padding

Существуют ресурсы, которые пытаются ответить на него, утверждая, что вы должны предоставить пользователю доступ на чтение к хранилищу ключей компьютера, однако однозначного ответа для решения этой проблемы не существует.

Среда: IIS 6.0, Windows Server 2003 R2, .NET 3.5 SP1

Ответы на вопрос(4)

Ваш ответ на вопрос