2010-05-04 17 views
8

Ich verwende SSL, um zwischen zwei in Java geschriebenen Komponenten zu kommunizieren. Ich kann keine CA benutzen, also muss ich alles selbst signieren. Unglücklicherweise bedeutet das, dass ich eine SunCertPathBuilderException bekomme, wenn ich Handshake versuche. Ich kann meinen eigenen X509TrustManager erstellen, der einfach alles vertraut, aber das verhindert den Zweck eines signierten Zertifikats.Programmgesteuertes Hinzufügen eines vertrauenswürdigen Zertifikats in Java

Ich möchte, wenn zuerst die Verbindung, um den Benutzer mit "SSL Handshake mit ungültigen cert. Aufforderung hinzufügen cert zu speichern?" oder etwas, damit sie für ihren Zertifikatsspeicher hinzugefügt werden können, wie es Webbrowser auf Websites mit ungültigen Zertifikaten tun. Ich kann online viele Beispiele finden, wie man dem Store über die Kommandozeile ein Cert hinzufügt, aber ich kann nicht herausfinden, wie man es programmatisch macht. Gibt es eine Möglichkeit, dies zu tun?

Antwort

5

Ja, es ist möglich.

Es gibt einen Code here, den ich vorher benutzt habe. Ich musste es modifizieren, um zu tun, was ich wollte, und ich vermute, dass Sie auch werden, aber das sollte Sie nah bringen - Sie versuchen nicht, einen Schlüssel zu importieren, also sollten Sie in der Lage sein, Dinge zu vereinfachen. In jedem Fall können Sie sich ein Bild davon machen, was Sie brauchen.

Das JDK JavaDoc für java.security.KeyStore ist auch ziemlich nützlich.

0

Warum erstellen Sie nicht Ihre eigene CA und signieren Sie Ihre Zertifikate damit? Dann müssen Sie nur das CA-eigene Zertifikat auf den Rechnern installieren und jedes von dieser CA signierte Zertifikat würde validieren.

+0

Da jeder Benutzer seinen eigenen Server betreibt und ein eigenes Zertifikat für die Authentifizierung benötigt (damit man sich von einem anderen unterscheiden kann). Ich nehme an, ich könnte eine CA erstellen, aber das würde die Installationsprozedur sehr erschweren und den Benutzer zwingen, Cert-Produktionsanfragen an mich zu stellen. – directedition

0

Warum sollten Sie dies tun, Sie validieren nicht, dass der Client ist, wer sie sagen, dass Sie nur die Zertifikate verwenden, um die Kommunikation zu verschlüsseln, so ein benutzerdefinierter Trust-Manager, der alle Zertifikate erlaubt. Was Sie fragen, ist möglich, und aus dem Speicher bezieht sich auch ein benutzerdefinierter Trust-Manager, um die Zertifikate zu überprüfen und sie im Keystore zu speichern. Ich kann mich nicht an die Details erinnern, aber zumindest weißt du, dass es möglich ist.

Verwandte Themen