Java-Client-Zertifikate über HTTPS/SSL
Beim Herstellen von HTTPS-Verbindungen mit Remote-Servern kann es Situationen geben, in denen Sie einen Client präsentieren müssen Zertifikat zur Authentifizierung. Dazu muss das Root-Zertifikat des Servers in einen Truststore importiert werden und das Client-Zertifikat mit seinem Passwort muss korrekt konfiguriert sein.
Um die javax.net.ssl.SSLHandshakeException zu überwinden: sun.security.validator.ValidatorException: Wenn das Problem beim Erstellen des PKIX-Pfads fehlschlägt, müssen Sie das Stammzertifikat des Servers wie folgt in einen Truststore importieren Befehl:
keytool -import -alias gridserver -file gridserver.crt -storepass $PASS -keystore gridserver.keystore
Als nächstes legen Sie die folgenden Eigenschaften fest, um die Keystore- und Truststore-Informationen anzugeben:
-Djavax.net.ssl.keyStoreType=pkcs12 -Djavax.net.ssl.trustStoreType=jks -Djavax.net.ssl.keyStore=clientcertificate.p12 -Djavax.net.ssl.trustStore=gridserver.keystore -Djavax.net.debug=ssl # very verbose debug -Djavax.net.ssl.keyStorePassword=$PASS -Djavax.net.ssl.trustStorePassword=$PASS
Mit dieser Konfiguration können Sie eine HttpsURLConnection erstellen und die SSLSocketFactory für die Verarbeitung des Clients festlegen Zertifikatsüberprüfung:
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); URL url = new URL("https://gridserver:3049/cgi-bin/ls.py"); HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setSSLSocketFactory(sslsocketfactory);
Von dort aus können Sie die Antwort der HTTPS-Verbindung lesen als gewünscht.
Das obige ist der detaillierte Inhalt vonWie löst man die Ausnahme javax.net.ssl.SSLHandshakeException bei der Verwendung von Java-Client-Zertifikaten mit HTTPS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!