2012-03-30 5 views
1

Ich habe ein Client-Zertifikat, aber ich bin nicht in der Lage, den öffentlichen Schlüssel CA, der der Aussteller ist, zu erhalten. Wenn ich es in Zertifikate MMC anzeigen, kann Windows den Aussteller nicht überprüfen. Ich muss mit einem externen Java Web Service kommunizieren, der das Zertifikat benötigt.Wie kann ich ein Clientzertifikat mit einer fehlenden Zertifizierungsstelle verwenden, um mit einem externen Webdienst zu kommunizieren?

Ich habe eine Beispielkonsole App erstellt, die das Zertifikat durch die Bindung verwendet und es funktioniert einwandfrei. Ich verschiebe diese Konfiguration und meinen Code jetzt in einen von IIS gehosteten WCF-Webdienst. Ich habe eine Straßensperre getroffen, indem ich nicht über den Fehler zu bekommen scheinen:

Could not establish trust relationship for the SSL/TLS secure channel with authority '[url]'

Der einzige Unterschied zwischen den beiden Anwendungen scheint in der Domäne zu sein, dass es läuft. Ich bin mir sicher, dass das Problem darin besteht, das Client-Zertifikat auf meiner Seite zu validieren und nicht versucht, eine Verbindung mit dem externen Java-Service herzustellen. Was ist der beste Weg um dies zu erreichen, da ich bereits nach dem öffentlichen Schlüssel CA gefragt habe, nur um abgewiesen zu werden?

Kann ich die Überprüfung in WCF überschreiben oder IIS optimieren, damit dies funktioniert?

Antwort

1

Nach meinem Kopf gegen die Wand schlagen und Stack-Trace Schlüsselwörter gerade ich auf einen Beitrag über die private Schlüssel Zertifikatdatei kam und IIS Zugriff auf diese benötigen.

Ich habe die Leseberechtigung auf die Zertifikatsdatei in der:

C:\Documents and Settings\all users\Application Data\Microsoft\Crypto\RSA\MachineKeys 

und dass mein Problem gelöst.

0

Sie können die Prüfung überschreiben, indem Sie einen Rückruf zu ServicePointManager.ServerCertificateValidationCallback hinzufügen. Der einfachste Rückruf wäre

static void Main() 
{ 
    ServicePointManager.ServerCertificateValidationCallback = ValidateRemoteCertificate; 

    // ... 
    Application.Run(new MyForm()); 
} 

private static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 
+0

Ich versuchte das vergebens, ich denke, Ihre Lösung würde das Problem für das Serverzertifikat des Dienstes, zu dem ich mich verbinde, lösen. Ich denke, mein Problem besteht darin, dass das Clientzertifikat und IIS versuchen, es zu validieren, bevor eine Verbindung zugelassen wird. – James