Comment obtenir l'emplacement des cacerts de l'installation java par défaut?

91

Je cherche comment obtenir l'emplacement de cacertsl'installation java par défaut, lorsque vous n'avez pas JAVA_HOMEou JRE_HOMEdéfini.

J'ai besoin d'une solution qui fonctionne au moins pour OS Xet Linux.

Oui. java -vest supposé fonctionner :)

Sorin
la source

Réponses:

156

Sous Linux , pour trouver l'emplacement de $JAVA_HOME:

readlink -f /usr/bin/java | sed "s:bin/java::"

le cacertssont sous lib/security/cacerts:

$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts

Sous mac OS X , pour trouver $JAVA_HOMEexécuter:

/usr/libexec/java_home

le cacertssont sous Home/lib/security/cacerts:

$(/usr/libexec/java_home)/lib/security/cacerts

MISE À JOUR (OS X avec JDK)

le code ci-dessus a été testé sur un ordinateur sans JDK installé. Avec JDK installé, comme l'a dit pR0Ps , c'est à

$(/usr/libexec/java_home)/jre/lib/security/cacerts
Kuf
la source
6
Sous OS X, le moyen "officiel" de trouver JAVA_HOME est en cours d'exécution/usr/libexec/java_home
Daniel Serodio
2
@DanielSerodio, d'accord. /usr/libexec/java_homeme donne une réponse différente de la readlinkcommande -based ci-dessus, et la première semble être correcte, en ce qu'elle contient le cacertsfichier.
Andrew Ferrier
1
@DanielSerodio et AndrewFerrier merci les gars, réponse mise à jour.
Kuf
@Kuf My JDK n'a pas ce dossier lib / security sur Mac Yosemite. Je suis
Brian
1
Sous OSX 10.10.5, le dossier de sécurité se trouve sous: Accueil / jre / lib / security
Sid Sarasvati
47

Depuis OS X 10.10.1 (Yosemite), l'emplacement du cacertsfichier a été remplacé par

$(/usr/libexec/java_home)/jre/lib/security/cacerts
pR0Ps
la source
9

Si vous avez besoin d'accéder à ces certificats par programme, il est préférable de ne pas utiliser du tout le fichier, mais d'y accéder via le gestionnaire de confiance. Le code suivant provient d'un cas de test OpenJDK (qui vérifie que la collection cacerts construite n'est pas vide):

TrustManagerFactory trustManagerFactory =
    TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
    trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
    (X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
    trustManager.getAcceptedIssuers();

Vous n'avez donc pas à vous soucier de l'emplacement du fichier ou du mot de passe du keystore.

eckes
la source
7

Dans MacOS Mojave, l'emplacement est:

/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts 

Si vous utilisez sdkman pour gérer les versions java, les cacerts sont dans

~/.sdkman/candidates/java/current/jre/lib/security
Nish
la source
REMARQUE: pour les versions actuelles de sdkman w / JDK 11, l'emplacement est le~/.sdkman/candidates/java/current/lib/security
Snekse le
3

Dans High Sierra, les cacerts sont situés à:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts

arpurush
la source
1

Vous pouvez également consulter readlink -f " which java". Cependant, cela peut ne pas fonctionner pour tous les wrappers binaires. Il est probablement préférable de démarrer réellement une classe Java.

eckes
la source