Le système CryptographicException RSACryptoServiceProvider ne peut pas trouver le fichier spécifié sous ASP.NET
J'ai une application qui utilise le RSACryptoServiceProvider pour décrypter certaines données en utilisant une clé privée stockée dans une variable).
Lorsque le Pool d'Applications IIS est configuré pour utiliser le Service Réseau, tout fonctionne très bien.
Cependant, lorsque nous avons configurer le Pool d'Applications IIS pour exécuter le code sous une Identité différente, nous obtenons les suivantes:
Système.De sécurité.La cryptographie.CryptographicException: Le système ne peut pas trouver le fichier spécifié. au Système.De sécurité.La cryptographie.Utils.CreateProvHandle(CspParameters paramètres, Boolean randomKeyContainer) au Système.De sécurité.La cryptographie.RSACryptoServiceProvider.ImportParameters(RSAParameters paramètres) au Système.De sécurité.La cryptographie.RSA.FromXmlString(String xmlString)
Le code est quelque chose comme ceci:
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
Il y a des ressources qui tentent d'y répondre en indiquant que vous devez donner à l'utilisateur un accès en lecture à la machine du magasin de clés - cependant il n'y a pas de réponse définitive à résoudre ce problème.
Environnement: IIS 6.0, Windows Server 2003 R2, .NET 3.5 SP1
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
En effet vous avez besoin de travailler un code comme celui-ci
Les utilisateurs suivants ont besoin d'accéder au dossier: C:\Documents and Settings\All Users\Application data\Microsoft\Crypto\RSA\MachineKeys
Alors maintenant, il fonctionne très bien pour moi.
J'ai résolu ce problème en définissant "de Charger le Profil Utilisateur" à True (c'était Faux) dans l'Application de la Piscine, les Paramètres Avancés /section Modèle de Processus.
La demande avait été fonctionne parfaitement sur le Serveur 2003 R2 /IIS 6 et le problème est apparu que j'étais en le configurant sur notre nouveau 2008 R2 server.
A eu l'idée d'essayer:
http://social.msdn.microsoft.com/forums/en-US/clr/thread/7ea48fd0-8d6b-43ed-b272-1a0249ae490f/
YMMV
Essayez de définir
EDIT:
Ensuite, essayez d'utiliser
à la place du constructeur avec l'entier-paramètre. Que le constructeur tente de générer une clé avec la clé spécifiée de longueur, et vous pourriez ne pas être en mesure de le faire avec vos autorisations.
Je voulais juste faire remarquer que Rasmus Faber solution a fonctionné pour moi (avec une modification mineure):
J'ai essayé d'obtenir MailBee.net pour signer un message sortant à l'aide de DKIM, et a reçu le même message que l'OP a reçu. Bien sûr, tout était très bien sur ma machine de dev, mais lors du téléchargement de mes clients hébergeur, je suis tombé sur ce problème. Comme je l'ai dit, la solution ci-dessus a travaillé pour moi pendant que les autres que j'ai trouvé en ligne (y compris le forum msdn lien ci-dessus) n'a pas.
(J'avais upvote et de commentaires, mais je n'ai pas assez de rep pour le faire. 😛 )
Grâce Rasmus Faber!