Comment mon programme Java sait-il où se trouve mon magasin de clés contenant le certificat? Ou encore, comment indiquer à mon programme Java où rechercher le fichier de clés?
Après avoir spécifié le magasin de clés, comment spécifier le certificat à utiliser pour authentifier le serveur sur le client?
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
Les propriétés SSL sont définies au niveau de la machine virtuelle via les propriétés système. Cela signifie que vous pouvez les définir lorsque vous exécutez le programme (Java -D ....) ou vous pouvez les définir dans le code en utilisant System.setProperty.
Les clés spécifiques que vous devez définir sont ci-dessous:
javax.net.ssl.keyStore - Emplacement du fichier de clés Java contenant le certificat et la clé privée d'un processus d'application. Sous Windows, le chemin spécifié doit utiliser des barres obliques, /, à la place des barres obliques inverses.
javax.net.ssl.keyStorePassword - Mot de passe pour accéder à la clé privée à partir du fichier de clés spécifié par javax.net.ssl.keyStore. Ce mot de passe est utilisé deux fois: pour déverrouiller le fichier de clés (mot de passe du magasin) et pour déchiffrer la clé privée stockée dans le magasin de clés (mot de passe de clé).
javax.net.ssl.trustStore - Emplacement du fichier de clés Java contenant la collection de certificats d'autorité de certification approuvés par ce processus d'application (magasin de confiance). Sous Windows, le chemin spécifié doit utiliser des barres obliques,
/
, à la place des barres obliques inverses,\
.Si aucun emplacement de magasin de clés de confiance n'est spécifié à l'aide de cette propriété, l'implémentation SunJSSE recherche et utilise un fichier de magasin de clés dans les emplacements suivants (dans l'ordre):
$Java_HOME/lib/security/jssecacerts
$Java_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword - Mot de passe pour déverrouiller le fichier de clés (mot de passe du magasin) spécifié par
javax.net.ssl.trustStore
.javax.net.ssl.trustStoreTypeFacultatif) Pour le format de fichier de magasin de clés Java, cette propriété a la valeur jks (ou JKS). Normalement, vous ne spécifiez pas cette propriété, car sa valeur par défaut est déjà jks.
--- (javax.net.debug - Pour activer la journalisation pour la couche SSL/TLS, définissez cette propriété sur ssl.
Juste un mot de prudence. Si vous essayez d'ouvrir un fichier de clés JKS existant à partir de Java 9, vous devez vous assurer de mentionner également les propriétés suivantes avec la valeur "JKS":
javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType
La raison en est que le type de magasin de clés par défaut, tel que prescrit dans le fichier Java.security, a été remplacé par pkcs12 à partir de jks à partir de Java 9.
Tout d’abord, il existe deux types de magasins de clés.
Individuel et Général
L'application utilisera celle indiquée au démarrage ou la valeur par défaut du système.
Ce sera un dossier différent si JRE ou JDK est en cours d’exécution ou si vous cochez le dossier personnel ou "global".
Ils sont aussi cryptés
En bref, le chemin sera comme:
$Java_HOME/lib/security/cacerts
pour le "général", qui a tout le CA pour les autorités et qui est assez important.
vous pouvez également mentionner le chemin au moment de l'exécution en utilisant -D
propriétés comme ci-dessous
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
Dans mon application Apache spark, je fournissais le chemin des certs et du magasin de clés à l'aide de l'option --conf
et de extraJavaoptions
dans spark-submit comme ci-dessous.
--conf 'spark.driver.extraJavaOptions=
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'