X509Certificate.CreateFromCertFile - le mot de passe réseau spécifié n'est pas correct

j'ai une application .NET que je veux utiliser comme client pour appeler un service web SSL SOAP. J'ai reçu un certificat de client valide appelé foo.pfx. Il y a un mot de passe sur le certificat lui-même.

j'ai localisé le certificat à l'endroit suivant: C:certsfoo.pfx

pour appeler le service web, Je dois joindre le certificat client. Voici le code:

public X509Certificate GetCertificateFromDisk(){
    try{             

       string certPath = ConfigurationManager.AppSettings["MyCertPath"].ToString(); 
       //this evaluates to "c:certsfoo.pfx". So far so good.

       X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
       // exception is raised here! "The specified network password is not correct" 

       return cert;

     }
    catch (Exception ex){    
        throw;
     }
}

on dirait que l'exception est autour de L'application .NET essayant de lire le disque. La méthode CreateFromCertFile est une méthode statique qui devrait créer une nouvelle instance de X509Certificate. La méthode n'est pas écrasée, et n'a qu'un seul argument: le chemin.

Quand j'ai inspecter l'Exception, je trouve ceci:

_COMPlusExceptionCode = -532459699
Source=mscorlib

Question: quelqu'un sait-il Quelle est la cause de l'exception "le mot de passe réseau spécifié n'est pas correct" ?

20
demandé sur p.campbell 2009-05-23 01:04:00

7 réponses

il S'avère que j'essayais de créer un certificat à partir du .pfx au lieu du.fichier cer.

Leçon apprise...

  • .les fichiers cer sont des certificats X. 509 sous forme binaire. Ils sont DER encoded.
  • .les fichiers pfx sont conteneur de fichiers. Aussi DER encoded. Ils contiennent non seulement des certificats, mais aussi les clés privées sous forme cryptée.
28
répondu p.campbell 2009-05-22 21:21:04

vous pourriez avoir besoin d'utiliser X509Certificate2() avec un paramètre de X509KeyStorageFlags.MachineKeySet à la place. Cette correction d'un problème similaire que nous avions. Source du site Web original qui suggérait ceci: http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production/

le cite:

Cause

La cause du problème ne semble pas avoir beaucoup à faire avec la les messages d'erreur. Pour une raison quelconque, le le constructeur essaie d'obtenir accès au magasin de clés privées bien que la clé privée soit stockée dans le fichier ouvert. Par défaut, la clé user store est utilisée mais ASP.NET (et probablement les Services Windows non interactifs en général) sont pas autorisé à l'ouvrir. Les Chances sont le magasin de clé d'utilisateur pour le compte sélectionné n'existe même pas.

Solution

une chose que vous pouvez essayer est de créer un magasin de clés Utilisateur en vous connectant le compte et Importe un certificat dans son magasin personnel (et puis l'enlever à nouveau).

une autre solution est de passer un paramètre supplémentaire au constructeur – un drapeau indiquant les clés privées sont (censés être) stockées dans l'ordinateur local – X509KeyStorageFlags.MachineKeySet, comme ceci: var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);

pour un PFX sans mot de passe, le mot de passe peut êtrestring.Empty.

Voir aussi https://stackoverflow.com/a/8291956/130352

9
répondu Chris J 2017-05-23 12:26:13

selon votre situation, vous devrez probablement installer le certificat sur le serveur pour obtenir le niveau de confiance avant d'exporter le .cer fichier.

j'ai dû faire cela pour un projet similaire et voici mes notes sur la façon dont il a été accompli.

Remplacer Foo.cer avec un export du certificat installé sur le serveur. (Installer le cert de l' pfx le fichier, puis l'exporter dans un cer fichier.)

  • Commande pour IIS6 pour permettre au groupe IIS_WPG d'accéder à la clé cert. Besoin d'installer winhttpcertcfg (Vous pouvez suivre le lien ci-dessous pour saisir votre propre copie).

    C:\Program fichiers\Windows Resource Kits\Tools > winhttpcertcfg-i (chemin vers le fichier pfx, par ex. e:\Certs\Foo.pfx) - C LOCAL_MACHINE\My-A IIS_WPG-p (Password for pfx file)

  • Crache des informations clés et des subventions privilège

    octroi de l'accès aux clés privées compte:

    (SERVERNAME)\IIS_WPG
    

Télécharger WinHttpCertCfg.msiici qui installe l'exe.

plus d'informations sur la façon d'utiliser la config cert peuvent être trouvées ici.

puis ça revient juste à la façon dont vous faites votre Cert push.

//Cert Challenge URL 
Uri requestURI = new Uri("https://someurl");

//Create the Request Object
HttpWebRequest pageRequest = (HttpWebRequest)WebRequest.Create(requestURI);

//After installing the cert on the server export a client cert to the working directory as Foo.cer
string certFile = MapPath("Foo.cer");
X509Certificate cert = X509Certificate.CreateFromCertFile(certFile);


//Set the Request Object parameters
pageRequest.ContentType = "application/x-www-form-urlencoded";
pageRequest.Method = "POST";
pageRequest.AllowWriteStreamBuffering = false;
pageRequest.AllowAutoRedirect = false;
pageRequest.ClientCertificates.Add(cert);

C'est comme ça que j'ai passé le cert mais je ne sais pas exactement ce que vous devez faire avec votre cert donc ce n'est peut-être pas la même chose pour vous.

6
répondu benjamin 2017-03-17 00:56:12

le message d'erreur "le mot de passe réseau spécifié n'est pas correct" est également retourné lorsque le certificat que vous essayez d'importer dans l'un des magasins du système D'exploitation est déjà présent dans ce magasin.

5
répondu Douwe 2010-05-11 23:19:47

dans mon cas, j'essayais d'exécuter en mode Application privée et j'ai eu la même erreur.

Le mot de passe réseau spécifié n'est pas correct

Le PrivateAuthenticator constructeur (dans Xero.Api.Example.Applications.Private) essayait d'importer le certificat en supposant qu'il n'y a pas de mot de passe défini lors de la création du certificat.

_certificate = new X509Certificate2();
_certificate.Import(certificatePath);

puis j'ai changé l'import pour utiliser une méthode de surcharge qui utilise le mot de passe,

_certificate.Import(certificatePath, "mypasswordusedtocreatethecertificate",  X509KeyStorageFlags.MachineKeySet);
3
répondu Dhanuka777 2015-09-29 00:08:09

vous pourriez avoir besoin de X509KeyStorageFlags.MachineKeySet.

j'utilise le certificat de web job.

1
répondu ABB 2017-05-30 11:28:41

dans mon cas, le changement D'identité vers NetworkService dans le Pool D'applications a résolu ce problème.

0
répondu Peska 2018-09-06 09:14:25