Ich muss eine Anwendung mit externen Web-Service integrieren, die zur Verwendung von https zwingt. Autoren dieses Webdienstes haben mir die .crt-Datei zur Verfügung gestellt, die ich für die Erstellung von https-Anfragen verwenden sollte. Nach einigen Untersuchungen habe ich den folgenden Code gefunden, die Keystore-Klasse für gesicherte https-Zugriff verwendet:mit KeyStore mit .crt
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File(file));
try {
trustStore.load(instream, password.toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext =
SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
SSLConnectionSocketFactory sslsf =
new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1.2"}, null,
BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
HttpClients.custom().setSSLSocketFactory(sslsf).build();
In diesem Code erfordert Schlüsselspeicher Eingabestrom zusammen mit PassworttrustStore.load(instream, password.toCharArray())
;. Wie ich jedoch verstehe, brauchen wir kein Passwort, wenn wir die .crt-Datei verwenden. Daher ist diese Art des Ladens von Zertifikaten für mich nicht geeignet. Zur gleichen Zeit, von dem, was ich bisher entdeckt habe, ist der Code, den ich hier zur Verfügung stelle, die einzige Möglichkeit, HttpClient für die Verwendung eines SSL-Zertifikats zu konfigurieren. Gibt es eine Problemumgehung, um HttpClient für die Verwendung von .crt-Zertifikat zu konfigurieren?
Danke,
Andrey
Eine dritte Option besteht darin, den Truststore direkt mit der Client-API zu verwenden, was das OP so aussehen lässt. Dies ist besser als jede der beiden Optionen, die Sie ursprünglich vorgestellt haben, da es keine andere Verwendung von Trust Stores beeinträchtigt. –
@ChristopherSchultz Einverstanden, wenn OP die ursprüngliche Lösung verwenden will, sicher, sicher kann. Ich denke, es hängt vom Anwendungsfall ab, dass es bei einer Verteilung auf mehrere Anwendungen einfacher sein könnte, globale Cacerts zu aktualisieren. –