У меня есть приложение, которое использует RSACryptoServiceProvider для дешифрования некоторых данных с помощью известного закрытого ключа (хранящегося в переменной).
Когда пул приложений IIS настроен на использование Network Service, все работает нормально.
Однако, когда мы настраиваем пул приложений 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