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 :)

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

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

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.


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

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.