2016-07-23 20 views
2

Wir haben versucht, ein Problem für eine Weile zu lösen.So senden Sie mehrere (einschließlich Stammzertifizierungsstellen) -Zertifikate von .net-Client

Wir verbrauchen einen Web-Service mit Client-Zertifikaten.

Service-Besitzer gaben uns eine .p12-Datei, sie enthält das Client-Zertifikat und CA und privaten Schlüssel.

Wir können den Zertifizierungspfad vom Zertifikat selbst sehen.

Das Problem ist, wenn wir versuchen, den Web-Service über SOAP UI aufzurufen, funktioniert es. In SOAPUI haben wir die .p12-Datei als Keystore ausgewählt und das Passwort festgelegt. Es klappt.

enter image description here

Wenn wir versuchen, den Web-Service über unsere .net-Client-Anwendung aufrufen, es funktioniert nicht.

--Dieser ist, wie wir den Web-Service

 channelFactory = new ChannelFactory<AcquisitionAutorisationService>(binding, serviceAddress); 
     channelFactory.Credentials.ClientCertificate.Certificate = new X509Certificate2(); 
     channelFactory.Credentials.ClientCertificate.Certificate.Import(@"C:\cert\abc.p12", "password", X509KeyStorageFlags.DefaultKeySet); 

Wenn wir die Pakete mit Wireshark überwachen nennen, sahen wir, dass, SOAPUI zwei Zertifikate sowohl Client-Zertifikat und Zertifizierungsstelle in der Anforderung sendet.

enter image description here

Aber .Net Client sendet nur das Client-Zertifikat nicht CA. Also Firewall des Servers erlaubt unsere Anrufe nicht.

enter image description here

Also meine Frage ist, wie kommen wir die CA-Root mit unserer Anfrage wie SOAP UI, in .Net senden verwaltet?

Wenn jemand irgendeine Idee über das Problem geben kann, würde ich geschätzt werden!

+0

Noch keine Antwort? Hast du eine Lösung gefunden? Ich habe ein ähnliches Problem –

Antwort

0

Wenn der erste Client (SOAP UI) das Zertifizierungsstellenzertifikat sendet, muss es ein Zwischenzertifizierungsstellenzertifikat sein, das selbst von einer anderen Zertifizierungsstelle signiert ist. Ein Client hat keinen Grund, ein Stammzertifizierungsstellenzertifikat zu senden.

Es könnte so einfach sein, wie das Zwischenzertifizierungsstellenzertifikat auf dem Server zu installieren, damit der zweite Client es nicht senden muss.

Es könnte auch so einfach sein, das Zwischenzertifizierungsstellenzertifikat auf dem Client im Windows-Zertifikatspeicher für den lokalen Computer (oder Benutzer) zu installieren, damit es verfügbar ist, wenn die Clientzertifikatskette erstellt wird.

Sonst bin ich ziemlich sicher, was Sie suchen, ist, wie man .NET erhält, um das Zwischenprodukt CA-Zertifikat in der Client-Zertifikatkette zu senden.

+0

Vielen Dank für die Antwort. Zwischenzertifizierungsstellenzertifikat wird tatsächlich im Zertifikatspeicher des Clientfensters installiert. Aber was frage ich mich, was macht den Unterschied zwischen SOAPUI und .net Client? Da beide Anwendungen die gleiche .p12-Datei verwenden. (Sorry, ich bin kein Experte für diese Zertifizierungsprobleme, ich könnte das Problem falsch ausdrücken) –

+0

Ich weiß nicht den Unterschied zwischen diesen beiden bestimmten Clients, aber zum Beispiel, wenn Sie einen OpenSSL-basierten Client schreiben, abhängig Auf welche API-Aufrufe Sie treffen, openssl fügt der Kette das Zwischenzertifikat hinzu oder wird es nicht hinzufügen.Es hängt alles von der API ab und davon, welche Aufrufe Sie an diese API senden. –