Tengo una aplicación que está utilizando RSACryptoServiceProvider para descifrar algunos datos utilizando una clave privada conocida (almacenada en una variable).RSACryptoServiceProvider El sistema CryptographicException no puede encontrar el archivo especificado en ASP.NET
Cuando el grupo de aplicaciones IIS está configurado para usar el servicio de red, todo funciona bien.
Sin embargo, al configurar el grupo de aplicaciones IIS para ejecutar el código con una identidad diferente, obtenemos lo siguiente:
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)
El código es algo como esto:
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
Hay recursos que intentan responder estableciendo que debe otorgar al usuario acceso de lectura al almacén de claves de la máquina; sin embargo, no hay una respuesta definitiva para resolver este problema.
Medio Ambiente: IIS 6.0, Windows Server 2003 R2, .NET 3.5 SP1
Gracias por la respuesta. No he tenido la oportunidad de probar esto todavía. ¿Sabes si las cuentas nuevas de forma predeterminada (instalación de Windows limpia) ya tienen acceso a esto? Estamos tratando de evitar tener que modificar demasiado, y esto parece ser un problema particularmente extraño para algo que debe ejecutarse bajo una confianza baja/media. –
Will, no estoy seguro! Este problema en particular le sucedió solo a mi máquina. Intenté con otra máquina desarrolladora y las cosas funcionan como se suponía. En el servidor, nuestros sistemas se ejecutan en un contexto de usuario diferente, por lo que no tuve ningún problema. –