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.
Ich möchte, wenn Sie die Verbindung zum ersten Mal herstellen, den Benutzer mit "SSL-Handshake mit ungültigem Zertifikat" auffordern. Zertifikat zum Speichern hinzufügen? " 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?
Ja, das ist möglich.
Es gibt Code hier , dass ich hab schon mal benutzt. 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 eine Vorstellung davon bekommen, was Sie brauchen.
Das JDK JavaDoc für java.security.KeyStore ist auch sehr nützlich.
Warum sollten Sie das tun? Sie bestätigen nicht, dass der Client derjenige ist, von dem sie sagen, dass Sie die Zertifikate nur zum Verschlüsseln der Kommunikation verwenden. Ein benutzerdefinierter Trust-Manager, der alle Zertifikate zulässt, genügt. Was Sie fragen, ist möglich und aus dem Speicher bezieht sich auch ein benutzerdefinierter Trust-Manager, um die Zertifikate zu validieren und sie im Keystore zu speichern. Ich kann mich nicht an die Details erinnern, aber zumindest weißt du, dass es möglich ist.
Tags und Links java ssl ssl-certificate