Heim > Java > javaLernprogramm > Wie lege ich eine benutzerdefinierte Zertifikatsvertrauensstellung für bestimmte SSL-Verbindungen in Java fest?

Wie lege ich eine benutzerdefinierte Zertifikatsvertrauensstellung für bestimmte SSL-Verbindungen in Java fest?

Susan Sarandon
Freigeben: 2024-12-18 13:48:14
Original
840 Leute haben es durchsucht

How to Set Custom Certificate Trust for Specific SSL Connections in Java?

Benutzerdefiniertes Zertifikatsvertrauen für gezielte Verbindungen festlegen

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");
...
Nach dem Login kopieren

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();
Nach dem Login kopieren

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();
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage