wake-up-neo.com

java SSL und cert keystore

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 das Zertifikat angegeben werden, das zur Authentifizierung des Servers gegenüber dem Client verwendet werden soll, nachdem der Keystore auf irgendeine Weise angegeben wurde?

148
deborah
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
100
DaveH

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 im Code festlegen, indem Sie System.setProperty ausführen.

Die spezifischen Schlüssel, die Sie einstellen müssen, sind unten:

javax.net.ssl.keyStore - Speicherort der Java= Keystore-Datei, die das eigene Zertifikat und den privaten Schlüssel eines Anwendungsprozesses enthält. Unter Windows muss der angegebene Pfadname Schrägstriche enthalten , /, anstelle von Backslashes.

javax.net.ssl.keyStorePassword - Kennwort für den Zugriff auf den privaten Schlüssel aus der von javax.net.ssl.keyStore angegebenen Keystore-Datei. Dieses Kennwort wird zweimal verwendet: Zum Entsperren der Keystore-Datei (Kennwort speichern) und zum Entschlüsseln des im Keystore gespeicherten privaten Schlüssels (Schlüsselkennwort).

javax.net.ssl.trustStore - Speicherort der Java= Keystore-Datei, die die Sammlung von CA-Zertifikaten enthält, denen dieser Anwendungsprozess vertraut (Trust Store) Der angegebene Pfadname muss Schrägstriche (/) anstelle von Schrägstrichen (\) verwenden.

Wenn mit dieser Eigenschaft kein Trust Store-Speicherort angegeben wird, sucht und verwendet die SunJSSE-Implementierung eine Keystore-Datei an den folgenden Speicherorten (in der angegebenen Reihenfolge):

  1. $Java_HOME/lib/security/jssecacerts
  2. $Java_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - Passwort zum Entsperren der mit javax.net.ssl.trustStore angegebenen Keystore-Datei (Store-Passwort).

javax.net.ssl.trustStoreTypeOptional) Für Java= Keystore-Dateiformat, diese Eigenschaft hat den Wert jks (oder JKS). Normalerweise geben Sie dies nicht an Eigenschaft, da der Standardwert bereits jks ist.

--- (javax.net.debug - Um die Protokollierung für die SSL/TLS-Schicht zu aktivieren, setzen Sie diese Eigenschaft auf ssl.

281

Nur ein Wort zur 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:

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

Der Grund dafür ist, dass der in der Java.security-Datei festgelegte Standard-Keystore-Typ von jks ab Java 9) auf pkcs12 geändert wurde.

13

Zunächst gibt es zwei Arten von Schlüsselspeichern.

Individual und General

Die Anwendung verwendet die beim Start angegebene oder die Standardeinstellung des Systems.

Es handelt sich um einen anderen Ordner, wenn JRE oder JDK ausgeführt wird oder wenn Sie den persönlichen oder den "globalen" Ordner auswählen.

Sie sind auch verschlüsselt

Kurz gesagt, der Pfad sieht folgendermaßen aus:

$Java_HOME/lib/security/cacerts für den "Allgemeinen", der alle CA für die Behörden hat und ziemlich wichtig ist.

11
Carlos Garcia

sie können den Pfad auch zur Laufzeit mit den folgenden -D - Eigenschaften angeben

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

In meiner Apache spark) - Anwendung habe ich den Pfad von Zertifikaten und Keystore mit der Option --conf Und extraJavaoptions in spark-submit wie unten angegeben angegeben

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'