Problemstellung
Die Integration eines externen Moduls in eine Anwendung erfordert den Zugriff auf SSL -Gesicherte Website mit einem selbstsignierten Zertifikat. Der vorhandene Code schlägt aufgrund von Vertrauensproblemen mit dem Zertifikat fehl. Die Herausforderung besteht darin, der Anwendung zu ermöglichen, dieses selbstsignierte Zertifikat nur für diese bestimmte Verbindung zu akzeptieren, ohne die Vertrauenswürdigkeit für andere Verbindungen zu gefährden oder den systemweiten Zertifikatspeicher zu ändern.
Optimale Lösung
Um einem selbstsignierten Zertifikat für eine bestimmte Verbindung selektiv zu vertrauen, erstellen Sie eine benutzerdefinierte SSLSocket-Factory und legen Sie sie auf der HttpsURLConnection fest, bevor Sie die Verbindung herstellen Verbindung:
... HttpsURLConnection conn = (HttpsURLConnection)url.openConnection(); conn.setSSLSocketFactory(sslFactory); conn.setMethod("POST"); ...
Erstellen der SSLSocket Factory
Um die SSLSocket Factory zu erstellen, initialisieren Sie sie wie folgt:
/* Load the keyStore that includes self-signed cert as a "trusted" entry. */ KeyStore keyStore = ... TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, tmf.getTrustManagers(), null); sslFactory = ctx.getSocketFactory();
Laden des Schlüsselspeichers
Laden Sie den Schlüsselspeicher mit dem selbstsignierten Zertifikat als „vertrauenswürdiger Eintrag“:
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); keyStore.load(trustStore, trustStorePassword); trustStore.close();
Alternative Schlüsselspeicher-Lademethode
Alternativ können Sie das PEM-Format-Zertifikat mit Keytool in einen Schlüsselspeicher importieren:
keytool -import -file selfsigned.pem -alias server -keystore server.jks
Das obige ist der detaillierte Inhalt vonWie lege ich eine benutzerdefinierte Zertifikatsvertrauensstellung für bestimmte SSL-Verbindungen in Java fest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!