Wie erhalte ich den Speicherort der Cacerts der Standard-Java-Installation?

91

Ich suche nach Möglichkeiten, wie Sie den Speicherort cacertsder Standard-Java-Installation ermitteln können, wenn Sie diese nicht haben JAVA_HOMEoder JRE_HOMEdefiniert haben.

Ich brauche eine Lösung, die zumindest für OS Xund funktioniert Linux.

Ja. java -vwird angenommen, dass es funktioniert :)

Sorin
quelle

Antworten:

155

So finden Sie unter Linux den Speicherort von $JAVA_HOME:

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

die cacertssind unter lib/security/cacerts:

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

Unter Mac OS X zu finden , $JAVA_HOMElaufen:

/usr/libexec/java_home

die cacertssind unter Home/lib/security/cacerts:

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

UPDATE (OS X mit JDK)

Der obige Code wurde auf einem Computer ohne installiertes JDK getestet. Wenn JDK installiert ist , ist es , wie pR0Ps sagte , bei

$(/usr/libexec/java_home)/jre/lib/security/cacerts
Kuf
quelle
6
In OS X läuft der "offizielle" Weg, um JAVA_HOME zu finden/usr/libexec/java_home
Daniel Serodio
2
@ DanielSerodio, stimmte zu. /usr/libexec/java_homegibt mir eine andere Antwort als der readlinkobige Befehl, und der erstere scheint insofern richtig zu sein, als er die cacertsDatei enthält .
Andrew Ferrier
1
@ DanielSerodio und Andrew Ferrier danke Jungs, Antwort aktualisiert.
Kuf
@Kuf Mein JDK hat diesen lib / security-Ordner auf Mac Yosemite nicht. Ich bin mir sicher, dass ich im richtigen $ JAVA_HOME
Brian
1
Unter OSX 10.10.5 befindet sich der Sicherheitsordner unter: Home / jre / lib / security
Sid Sarasvati
47

Ab OS X 10.10.1 (Yosemite) wurde der Speicherort der cacertsDatei in geändert

$(/usr/libexec/java_home)/jre/lib/security/cacerts
pR0Ps
quelle
8

Wenn Sie programmgesteuert auf diese Zertifikate zugreifen müssen, verwenden Sie die Datei am besten überhaupt nicht, sondern greifen Sie über den Vertrauensmanager darauf zu. Der folgende Code ist aus einem OpenJDK - Test Fall (das stellt sicher , dass die eingebaute cacerts Sammlung nicht leer ist ):

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

Sie müssen sich also nicht mit dem Speicherort der Datei oder dem Kennwort des Schlüsselspeichers befassen.

eckes
quelle
7

In MacOS Mojave lautet der Speicherort:

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

Wenn Sie mit sdkman Java-Versionen verwalten, befinden sich die cacerts in

~/.sdkman/candidates/java/current/jre/lib/security
Nish
quelle
HINWEIS: Für aktuelle Versionen von sdkman mit JDK 11 lautet der Speicherort~/.sdkman/candidates/java/current/lib/security
Snekse
3

In High Sierra befinden sich die Cacerts in:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts

Arpurush
quelle
1

Sie können auch readlink -f " which java" konsultieren . Es funktioniert jedoch möglicherweise nicht für alle Binär-Wrapper. Es ist höchstwahrscheinlich besser, eine Java-Klasse zu starten.

eckes
quelle