Verwenden benutzerdefinierter Zertifikate für bestimmte Verbindungen in Java
In Java-Anwendungen kann es vorkommen, dass eine Verbindung mit einem Server hergestellt wird ein selbstsigniertes Zertifikat. Obwohl das Importieren des Zertifikats in den Zertifizierungsstellenspeicher der JRE ein unkomplizierter Ansatz ist, wird er aufgrund seiner globalen Auswirkungen auf andere Java-Anwendungen möglicherweise nicht bevorzugt.
Stattdessen umfasst ein gezielterer Ansatz das Einrichten einer benutzerdefinierten SSLSocketFactory und -Einstellung es auf dem HttpsURLConnection-Objekt, bevor die Verbindung initiiert wird:
... HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(sslFactory); conn.setMethod("POST"); ...
Um eine SSLSocketFactory zu erstellen, laden Sie zunächst den KeyStore enthält das selbstsignierte Zertifikat als „vertrauenswürdigen“ Eintrag:
KeyStore keyStore = ...
Als nächstes initialisieren Sie die TrustManagerFactory:
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
Initialisieren Sie den SSLContext mit den TrustManagern:
SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, tmf.getTrustManagers(), null);
Zum Schluss erhalten Sie die SSLSocketFactory:
sslFactory = ctx.getSocketFactory();
Durch die Verwendung einer benutzerdefinierten SSLSocketFactory können Sie bestimmte Zertifikate und deren Akzeptanz ausschließlich für die jeweilige Verbindung verwalten. Mit diesem Ansatz können Sie auf bestimmte Verbindungen abzielen, ohne dass sich dies global auf Ihre Anwendung oder andere Java-Programme auf dem System auswirkt.
Das obige ist der detaillierte Inhalt vonWie kann ich benutzerdefinierte Zertifikate für bestimmte Java-Verbindungen verwenden, anstatt den Truststore der JRE zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!