Frage

Ich habe eine .NET-Anwendung, die ich als Client verwenden möchten, eine SSL-SOAP-Web-Service zu rufen. Ich habe mit einem gültigen Client-Zertifikat genannt foo.pfx geliefert. Es ist ein Passwort auf dem Zertifikat selbst.

Ich habe das Zertifikat an der folgenden Position befindet: C:\certs\foo.pfx

, um den Web-Service anzurufen, ich brauche das Client-Zertifikat zu befestigen. Hier ist der 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;
     }
}

Es klingt wie die Ausnahme um die .NET-Anwendung versucht, die Festplatte zu lesen. Das Verfahren CreateFromCertFile ist eine statische Methode, die eine neue Instanz von X509Certificate erstellen soll. Das Verfahren ist nicht außer Kraft gesetzt, und hat nur ein Argument:. Den Pfad

Wenn ich die Ausnahme überprüfen, finde ich:

_COMPlusExceptionCode = -532459699
Source=mscorlib

Frage: weiß jemand, was die Ursache für die Ausnahme „Das angegebene Netzwerkkennwort nicht korrekt ist“

?
War es hilfreich?

Lösung

Es stellte sich heraus, dass ich versuchte, ein Zertifikat aus der PFX anstelle der CER-Datei zu erstellen.

Lektion gelernt ...

  • .cer-Dateien sind ein X.509-Zertifikat in binärer Form. Sie sind DER codierte .
  • .pfx-Dateien sind Containerdateien . Auch DER-codiert. Sie enthalten nicht nur Zertifikate, sondern auch private Schlüssel in verschlüsselter Form.

Andere Tipps

Sie müssen möglicherweise an Benutzer X509Certificate2() mit einem Parameter von X509KeyStorageFlags.MachineKeySet statt. Diese feste ein ähnliches Problem, das wir hatten. Kredit auf die ursprüngliche Website, die diese vorgeschlagen: http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production /

Zitiert:

  

Ursache

     

Die Ursache des Problems scheint nicht viel zu haben, mit dem zu tun,   Fehlermeldungen. Aus irgendeinem Grund versucht der Konstruktor zu bekommen   Zugriff auf den privaten Schlüssel speichern, obwohl der private Schlüssel in gespeichert   in der Datei geöffnet wird. Standardmäßig wird der Benutzer Schlüsselspeicher verwendet, aber   ASP.NET (und wahrscheinlich nicht interaktive Windows-Dienste im Allgemeinen) sind   nicht erlaubt, sie zu öffnen. Die Chancen stehen der Benutzer den Schlüsselspeicher für die   ausgewähltes Konto nicht einmal existieren.

     

Lösung

     

Eine Sache, die Sie könnten versuchen, einen Benutzerschlüsselspeicher schafft, indem Sie sich   das Konto und ein Zertifikat in seinem persönlichen Speicher importieren (und   entfernen Sie es dann wieder).

     

Eine andere Lösung ist, einen zusätzlichen Parameter an den Konstruktor übergeben   - ein Flag die privaten Schlüssel angeben, werden (sein soll) in gespeichert   der lokale Computer - X509KeyStorageFlags.MachineKeySet, wie diese: var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);

Für eine PFX ohne Passwort, dann kann mit einem Passwort als string.Empty angegeben werden.

Siehe auch https://stackoverflow.com/a/8291956/130352

Je nach Situation müssen Sie wahrscheinlich das Zertifikat auf dem Server installieren, zuerst die Vertrauensebene zu erhalten, bevor Sie die .cer-Datei exportieren.

Ich habe dies für ein ähnliches Projekt zu tun und hier waren meine Notizen darüber, wie es erreicht wurde.

Setzen Sie die Foo.cer mit einem Export des Zertifikats auf dem Server installiert. (Installieren Sie das Zertifikat aus der pfx Datei exportieren und sie dann in eine cer-Datei.)

  • Befehl für IIS6 IIS_WPG Gruppe Zugriff auf den cert Schlüssel zu ermöglichen. Sie benötigen winhttpcertcfg zu installieren (Sie können den Link unten folgen Sie Ihre eigene Kopie zu greifen).

      

    C: \ Programme \ Windows Resource Kits \ Tools> winhttpcertcfg -i (Pfad zu pfx Datei, zB e:. \ Zertifikate \ Foo.pfx) -c LOCAL_MACHINE \ My -a IIS_WPG -p (Passwort für pfx Datei )

  • ausspuckt Taste Info und gewährt Privileg

    Die Gewährung private Schlüssel Zugang zum Konto:

    (SERVERNAME)\IIS_WPG
    

Download WinHttpCertCfg.msi hier , die installiert die exe.

Weitere Informationen darüber, wie die cert Konfiguration verwendet werden können hier .

Dann geht es nur zurück, wie Sie Ihre cert Push tun.

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

Dieses, wie ich das CERT vergangen, aber nicht genau, was Sie benötigen mit Ihrem cert zu tun, damit diese nicht das gleiche für Sie sein könnte.

Das ‚das angegebene Netzwerkkennwort ist nicht korrekt‘ Fehlermeldung auch zurückgegeben, wenn das Zertifikat Sie in einen der OS speichern zu importieren versuchen, in diesem Geschäft bereits vorhanden ist.

In meinem Fall habe ich versucht im privaten Anwendungsmodus zu laufen und ich habe den gleichen Fehler.

  

Das angegebene Netzwerkkennwort ist falsch

Der PrivateAuthenticator Konstruktor (in Xero.Api.Example.Applications.Private) wurde versucht, das Zertifikat zu importieren vorausgesetzt, es gibt kein Passwort bei der Erstellung des Zertifikats.

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

Dann änderte ich den Import eine Überlastung Methode zu verwenden, die das Passwort verwendet,

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

Sie können auf X509KeyStorageFlags.MachineKeySet müssen.

Ich bin mit Zertifikat von Web-Job.

In meinem Fall Identität zu NetworkService- in Application Pool zu ändern hat dieses Problem gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top