web-dev-qa-db-fra.com

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

Je cherche comment obtenir l'emplacement de cacerts de l'installation par défaut Java, lorsque vous n'avez pas Java_HOME ou JRE_HOME défini.

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

Oui. Java -v est supposé fonctionner :)

73
sorin

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

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

les cacerts sont sous lib/security/cacerts:

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

Sous mac OS X , pour rechercher $Java_HOME courir:

/usr/libexec/Java_home

les cacerts sont sous Home/lib/security/cacerts:

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

UPDATE (OS X avec JDK)

le code ci-dessus a été testé sur un ordinateur sur lequel JDK n'est pas installé. Avec JDK installé, comme le dit pR0Ps , il est à

$(/usr/libexec/Java_home)/jre/lib/security/cacerts
128
Kuf

À partir de OS X 10.10.1 (Yosemite), l’emplacement du fichier cacerts a été remplacé par

$(/usr/libexec/Java_home)/jre/lib/security/cacerts
41
pR0Ps

Si vous devez accéder à ces certificats via un programme, il est préférable de ne pas utiliser le fichier du tout, mais d'y accéder via le gestionnaire de confiance. Le code suivant provient d'un OpenJDK Test cas (qui s'assure que la collection construite cacerts 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 préoccuper de l’emplacement du fichier ou du mot de passe du fichier de clés.

4
eckes

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, le fichier cacerts est en

~/.sdkman/candidates/Java/current/jre/lib/security
4
Nish

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

3
arpurush

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

1
eckes