web-dev-qa-db-fra.com

Comment savoir quel fichier de clés est utilisé par la machine virtuelle Java?

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
114
jini

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,

  1. Ordinateur ---> Avancé -> Variables d'environnement ---> Java_HOME

  2. 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).

114
kosa

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

31
dbrin

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.

25
comfytoday

Vous pouvez le trouver dans votre répertoire "Home":

Sous Windows 7:

C:\Users\<YOUR_ACCOUNT>\.keystore

Sous Linux (Ubuntu):

/home/<YOUR_ACCOUNT>/.keystore
15
Evans Y.

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; 
} 
13
ceving

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é.

6
Sharan Rajendran

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

0
VSh

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.

0
Patrick Beard

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.

0
Nicolas de Jong