86 votes

CryptographicException n'a pas été gérée : Le système ne trouve pas le fichier spécifié

J'essaie de comprendre les mystères de la communication SSL et j'ai trouvé un excellent tutoriel sur ce site . J'ai essayé de tester mon propre certificat. En utilisant Visual Studio 2012, j'ai simplement ajouté un fichier existant (mon certificat au format .pfx) et j'ai ensuite modifié les paramètres "certificate" et "password" dans app.config. Cependant, lorsque j'ai essayé de l'exécuter, j'ai obtenu une erreur :

CryptographicException n'a pas été gérée : Le système ne peut pas trouver le fichier spécifié

Ensuite, j'ai essayé la même chose dans mon service Web. J'ai obtenu plus de détails sur l'erreur :

System.Security.Cryptography.CryptographicException: System cannot find specified file.

   at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
   v System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
   v TestServer.DataService.LoadSoap() v c:\Users\Administrator\Documents\Visual Studio 2012\Projects\TestServer\TestServer\DataService.asmx.cs:line 48

J'ai posé cette question à l'auteur de l'article, mais comme sa dernière réponse date de mars 2012, je ne suis pas sûr qu'il y réponde. Si quelqu'un pouvait m'aider à résoudre ce problème, je lui en serais très reconnaissant.

P.S. : Lors de l'exportation du certificat de .cer vers .pfx, j'ai modifié le titre du fichier exporté. Bien que je doute de son effet sur le problème, je préfère le mentionner.

270voto

nologo Points 898

Avez-vous défini les paramètres suivants pour le pool d'applications dans IIS ?

  1. Aller dans le Gestionnaire IIS
  2. Accédez à l'instance du pool d'applications
  3. Cliquez sur Paramètres avancés
  4. Sous Modèle de processus, définir Load User Profile (Charger le profil de l'utilisateur) sur true (vrai).

Voir la question de la pile pour plus d'informations : Que se passe-t-il exactement lorsque je règle LoadUserProfile du pool IIS ?

19voto

Salomon Arias Points 191

Pour ceux d'entre vous qui ont reçu l'exception cryptographique lorsqu'ils ont tenté d'importer un certificat X509Certificate2 à l'aide de la méthode Import, j'ai constaté que l'utilisation de l'option Enum pour MachineKeySet contournait la nécessité de créer un userContext dans IIS, et était donc plus facile à mettre en œuvre.

X509Certificate2 cert = new X509Certificate2();
cert.Import(certificateFilePath, certPasshrase, 
X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

9voto

Alejandro PC Points 141

En passant CspParameters avec l'indicateur csdMachineKeyKeyStore, IIS peut contourner la restriction qui déclenche l'exception.

CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant();
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams);

J'ai trouvé la solution ici .

6voto

m12lrpv Points 103

Parce que cette question a un classement de recherche élevé, je voudrais présenter un moyen de présenter à X509Certificate2 un chemin absolu (qu'il n'accepte que) vers un fichier clé pxf relativement localisé dans une application ASP.net.

    string path = HttpContext.Current.Server.MapPath("~") + "..\keys\relative_key.pfx";

    X509Certificate2 cert = new X509Certificate2(path, "", X509KeyStorageFlags.DefaultKeySet);

4voto

Vous devez spécifier le chemin d'accès absolu au lieu du chemin d'accès relatif.

AppDomain.CurrentDomain.BaseDirectory +"/Certificate/cer.PFX"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X