Question

J'ai une application .NET que je veux utiliser en tant que client d'appeler un service Web SOAP SSL. J'ai fourni avec un certificat client valide appelé foo.pfx. Il y a un mot de passe sur le certificat lui-même.

J'ai localisé le certificat à l'adresse suivante: C:\certs\foo.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:\\certs\\foo.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 dans l'application .NET essaie de lire le disque. La méthode CreateFromCertFile est une méthode statique qui devrait créer une nouvelle instance de X509Certificate. Le procédé est non substituée, et a un seul argument:. Le chemin

Quand je l'Exception inspecte, je trouve ceci:

_COMPlusExceptionCode = -532459699
Source=mscorlib

Question: personne ne sait ce que la cause de l'exception « Le mot de passe réseau spécifié est incorrect »

?
Était-ce utile?

La solution

se trouve que je suis en train de créer un certificat du .pfx au lieu du fichier .cer.

Leçon apprise ...

  • les fichiers .cer sont un certificat X.509 sous forme binaire. Ils sont DER encodée.
  • les fichiers .pfx sont fichiers conteneurs . En outre DER codé. Ils contiennent des certificats non seulement, mais aussi des clés privées sous forme cryptée.

Autres conseils

Vous devrez peut-être X509Certificate2() utilisateur avec un paramètre de X509KeyStorageFlags.MachineKeySet à la place. Ce rapport a fixé un problème similaire que nous avions. Le crédit au site original qui a suggéré ceci: http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production /

Citation:

  

Cause

     

La cause du problème ne semble pas avoir grand-chose à voir avec le   messages d'erreur. Pour une raison quelconque le constructeur tente d'obtenir   l'accès au magasin clé privée, bien que la clé privée est stockée   dans le fichier en cours d'ouverture. Par défaut, le magasin de clé utilisateur est utilisé, mais   ASP.NET (et les services Windows probablement non interactifs en général) sont   pas le droit de l'ouvrir. Les chances sont le magasin de clé utilisateur pour la   compte sélectionné n'existe même pas.

     

Solution

     

Une chose que vous pouvez essayer est de créer un magasin de clé utilisateur en vous connectant   le compte et l'importation d'un certificat dans son magasin personnel (et   puis retirez-le à nouveau).

     

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

Pour un PFX sans mot de passe, mot de passe peut être spécifié comme string.Empty.

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

En fonction de votre situation, vous avez probablement besoin d'installer le certificat sur le serveur premier à obtenir le niveau de confiance avant d'exporter le fichier .cer.

Je devais le faire pour un projet similaire et voici mes notes étaient sur la façon dont il a été accompli.

Remplacer le Foo.cer avec une exportation du certificat installé sur le serveur. (Installer le cert à partir du fichier pfx puis l'exporter vers un fichier cer.)

  • Commande pour IIS6 pour permettre l'accès du groupe IIS_WPG à la clé de cert. Vous avez besoin d'installer winhttpcertcfg (Vous pouvez suivre le lien ci-dessous pour saisir votre propre copie).

      

    C: \ Program Files \ Kits de ressources Windows \ Outils> winhttpcertcfg -i (chemin d'accès au fichier PFX, par exemple e:. \ Cert \ Foo.pfx) -c LOCAL_MACHINE \ My -a IIS_WPG -p (mot de passe pour le fichier PFX )

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

    L'octroi d'accès clé privée pour le compte:

    (SERVERNAME)\IIS_WPG
    

Télécharger WinHttpCertCfg.msi ici qui installe les exe.

Plus d'informations sur la façon d'utiliser la config cert se trouve ici .

Alors il va juste à la façon dont vous faites votre push cert.

//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);

comment je suis passé le cert, mais ne sais pas exactement ce que vous besoin de faire avec votre cert si cela pourrait ne pas être la même chose pour vous.

Le « mot de passe réseau spécifié est incorrect » message d'erreur est également renvoyée lorsque le certificat que vous essayez d'importer dans l'un des systèmes d'exploitation des magasins est déjà présent dans ce magasin.

Dans mon cas, je cherchais à exécuter en mode Application privé et je suis la même erreur.

  

Le mot de passe réseau spécifié est incorrect

Le constructeur de PrivateAuthenticator (en Xero.Api.Example.Applications.Private) a essayé 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);

Alors j'ai changé l'importation d'utiliser une méthode de surcharge qui utilise le mot de passe,

_certificate.Import(certificatePath, "mypasswordusedtocreatethecertificate",  X509KeyStorageFlags.MachineKeySet);

Vous devrez peut-être X509KeyStorageFlags.MachineKeySet.

J'utilise le certificat de travail Web.

Dans mon cas, changer d'identité à NetworkService dans le pool d'applications résoudre ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top