Frage

Ich habe derzeit ein selbst signiertes Zertifikat für meine HTTPS-Webserver.

In meinem Java-Programm gibt es eine SSLSocketFactory, die eine Buchse zum Webserver schaffen. Die Standardimplementierung von Sunblockem unterzeichnete die Selbst Zertifikat. Mit einer eigenen Implementierung eines X509TrustManager kann ich nur prüfen, ob das Datum des Zertifikats gültig ist.

Gibt es eine Möglichkeit, die Standardimplementierung überprüft die Gültigkeit (Datum und Hostnamen, ...) zu lassen, und wenn es einen Dialog, um zu zeigen, schlägt der Benutzer akzeptieren, dieses Zertifikat zu lassen?

Jeder Code, den ich bis jetzt gefunden nur die ssl Prüfung deaktiviert und akzeptierte alle ungültiges Zertifikat.

War es hilfreich?

Lösung

Ich habe nicht versucht, tatsächlich das, aber warum können Sie Ihren eigenen Trust-Manager nicht implementieren, die ersten Teilnehmer auf den Standard Trust-Manager zu überprüfen, ob das Zertifikat gültig ist und wenn nicht, fragt den Benutzer, ob er noch zu will akzeptieren Sie das Zertifikat?


Sie können die meisten der Sicherheitsklassen mit null Argumente initialisieren Standardwerte zu verwenden. Um die Standard-Trust-Manager zu erhalten, müssen Sie die verfügbare Vertrauen Manager erhalten und die ersten in der mgrs Arrays wählen, um den X509TrustManager-Schnittstelle zu implementieren. Üblicherweise wird das Array enthält nur eine elment trotzdem.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

Nachdem Sie den Standard-Trust-Manager mit Ihrer eigenen Nebenstelle gewickelt haben, haben Sie einen SSL-Kontext zu initialisieren und eine Socket-Factory von ihm bekommen:

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

Dann diese Socket-Factory verwenden, um neue Client-Sockets zu erstellen oder weitergeben HttpsURLConnection.setDefaultSSLSocketFactory das https-Protokoll in URLs mit Ihrem eigenen Trust-Manager zu verwenden.

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