Je dois importer un certificat dans mon magasin de clés JVM. J'utilise les éléments suivants:
keytool -import -alias daldap -file somecert.cer
donc je devrais probablement changer mon appel en quelque chose comme:
keytool -import -alias daldap -file somecert.cer -keystore cacerts –storepass changeit
Votre magasin de clés sera dans votre Java_HOME---> JRE -->lib---> security--> cacerts
. Vous devez vérifier où votre Java_HOME est configuré, éventuellement un de ces endroits,
Ordinateur ---> Avancé -> Variables d'environnement ---> Java_HOME
Vos fichiers de commandes de démarrage du serveur.
Dans votre commande d'importation -keystore cacerts (indiquez ici le chemin complet de l'environnement JRE ci-dessus au lieu de simplement indiquer cacerts).
Emplacement du magasin de clés
Chaque commande keytool a une option -keystore
pour spécifier le nom et l'emplacement du fichier de clés persistantes pour le fichier de clés géré par keytool. Le magasin de clés est par défaut stocké dans un fichier nommé .keystore
dans le répertoire de base de l'utilisateur, comme déterminé par la propriété système "user.home". Étant donné le nom d'utilisateur uName, la valeur de la propriété "user.home" est définie par défaut sur
C:\Users\uName on Windows 7 systems
C:\Winnt\Profiles\uName on multi-user Windows NT systems
C:\Windows\Profiles\uName on multi-user Windows 95 systems
C:\Windows on single-user Windows 95 systems
Ainsi, si le nom d'utilisateur est "cathy", "user.home" par défaut est
C:\Users\cathy on Windows 7 systems
C:\Winnt\Profiles\cathy on multi-user Windows NT systems
C:\Windows\Profiles\cathy on multi-user Windows 95 systems
http://docs.Oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html
Mac OS X 10.12 avec Java 1.8:
$ Java_HOME/jre/lib/security
cd $Java_HOME
/Bibliothèque/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
De là, c'est dans:
./jre/lib/security
J'ai un magasin de clés cacerts à l'intérieur.
Pour spécifier ceci en tant qu'option VM:
-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit
Je ne dis pas que c'est la bonne façon (Java ne sait pas s'il faut regarder dans Java_HOME?), Mais c'est ce que je devais faire pour que cela fonctionne.
Vous pouvez le trouver dans votre répertoire "Home":
Sous Windows 7:
C:\Users\<YOUR_ACCOUNT>\.keystore
Sous Linux (Ubuntu):
/home/<YOUR_ACCOUNT>/.keystore
Cela fonctionne pour moi:
#! /bin/bash CACERTS=$(readlink -e $ (nomrépertoire $ (readlink -e $ (quel outil-clé))) /../ lib/security/cacerts) if keytool -list -keystore $ CACERTS -storepass changeit>/dev/null; then echo $ CACERTS else echo 'Impossible de trouver le fichier cacerts.' > & 2 Sortie 1 Fi
Seulement pour Linux. Mon Solaris n'a pas de lien de lecture. Finalement, j'ai utilisé ce script Perl:
#!/usr/bin/env Perl utilise strict; utilise des avertissements; utilise Cwd qw (realpath); $ _ = realpath ((grep {-x && -f} map {"$ _/keytool"} divisé (':', $ ENV {CHEMIN}) [0]); die "Impossible de trouver le keytool" sauf si défini $ _; mon $ keytool = $ _; print "Utilisation de '$ keytool'.\n"; s/keytool $ //; $ _ = realpath ($ _. '../lib/security/cacerts') ;;;;.____.]die "Impossible de trouver des cacerts" à moins que -f $ _; my $ cacerts = $ _; print "Importation dans '$ cacerts'.\N"; `$ Keytool -list -keystore" $ cacerts "-storepass changeit`; Die" Impossible de lire le conteneur de clé "à moins que $? == 0; Exit si $ ARGV [0] eq '-d'; Pour chaque (@ARGV) { Mon $ cert = $ _; s/\\\\\\\\\\\\\\\\\\\\\\ '] mon $ alias = $ _; print "Importation' $ cert 'sous le nom' $ alias '.\n"; `keytool -importcert -file" $ cert "-alias" $ alias "-keystore" $ cacerts "-storepass changeit`; warn" Impossible d'importer le certificat: $? " à moins que $? == 0; }
Comme indiqué par DimtryB, le fichier de clés se trouve par défaut dans le répertoire de l'utilisateur. Mais si vous essayez de mettre à jour le fichier cacerts
afin que la machine virtuelle puisse sélectionner les clés, vous devrez alors mettre à jour le fichier cacerts
sous jre/lib/security
. Vous pouvez également afficher les clés en exécutant la commande keytool -list -keystore cacerts
pour voir si votre certificat est ajouté.
En plus de toutes les réponses ci-dessus:
Si la mise à jour du fichier cacerts dans le répertoire JRE ne vous aide pas, essayez de le mettre à jour dans JDK.
C:\Program Files\Java\jdk1.8.0_192\jre\lib\security
Sur Debian, en utilisant openjdk version "1.8.0_212", j'ai trouvé cacerts ici:
/etc/ssl/certs/Java/cacerts
Cela serait pratique s'il y avait une commande standard pour imprimer ce chemin.
Nous avons rencontré ce problème sur un Tomcat exécuté à partir d'un répertoire jre qui a été (presque complètement) supprimé après une mise à jour automatique de jre, de sorte que jre en cours ne puisse plus trouver jre .../lib/security/cacerts car il n'existe plus.
Le redémarrage de Tomcat (après avoir modifié la configuration pour qu'elle s'exécute à partir de l'emplacement différent de jre) a résolu le problème.