Woher weiß mein Java-Programm, wo sich mein Keystore mit dem Zertifikat befindet? Oder wie kann ich meinem Java-Programm mitteilen, wo nach dem Keystore gesucht werden soll?
Wie kann nach Angabe des Schlüsselspeichers das Zertifikat angegeben werden, das zur Authentifizierung des Servers gegenüber dem Client verwendet werden soll?
Antworten:
quelle
SSL-Eigenschaften werden auf JVM-Ebene über Systemeigenschaften festgelegt. Das heißt, Sie können sie entweder festlegen, wenn Sie das Programm ausführen (java -D ....), oder Sie können sie in Code festlegen, indem Sie System.setProperty ausführen.
Die spezifischen Schlüssel, die Sie einstellen müssen, sind unten:
quelle
Nur ein Wort der Vorsicht. Wenn Sie versuchen, einen vorhandenen JKS-Keystore ab Java 9 zu öffnen, müssen Sie auch die folgenden Eigenschaften mit dem Wert "JKS" angeben:
Der Grund dafür ist, dass der in der Datei java.security vorgeschriebene Standard-Keystore-Typ von jks ab Java 9 in pkcs12 geändert wurde.
quelle
Zunächst gibt es zwei Arten von Keystores.
Individuell und allgemein
Die Anwendung verwendet die beim Start angegebene oder die Standardeinstellung des Systems.
Es wird ein anderer Ordner sein, wenn JRE oder JDK ausgeführt wird oder wenn Sie den persönlichen oder den "globalen" Ordner überprüfen.
Sie sind auch verschlüsselt
Kurz gesagt, der Pfad wird wie folgt aussehen:
$JAVA_HOME/lib/security/cacerts
für den "allgemeinen", der alle CA für die Behörden hat und ziemlich wichtig ist.quelle
Sie können den Pfad auch zur Laufzeit mithilfe der folgenden
-D
Eigenschaften angebenIn meiner Apache-Spark-Anwendung habe ich den Pfad von Zertifikaten und Keystore mithilfe der
--conf
Option undextraJavaoptions
in Spark- Submit wie unten angegeben angegebenquelle