Come ottenere la posizione dei cacert dell'installazione Java predefinita?


91

Sto cercando come ottenere la posizione cacertsdell'installazione java predefinita, quando non hai JAVA_HOMEo JRE_HOMEdefinito.

Ho bisogno di una soluzione che funzioni almeno per OS Xe Linux.

Sì. java -vsi presume che funzioni :)

Risposte:


156

Sotto Linux , per trovare la posizione di $JAVA_HOME:

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

la cacertssono sotto lib/security/cacerts:

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

In mac OS X , per trovare $JAVA_HOMEesegui:

/usr/libexec/java_home

la cacertssono sotto Home/lib/security/cacerts:

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

AGGIORNAMENTO (OS X con JDK)

il codice sopra è stato testato su computer senza JDK installato. Con JDK installato, come ha detto pR0Ps , è a

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

6
In OS X, il modo "ufficiale" per trovare JAVA_HOME è in esecuzione/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio, d'accordo. /usr/libexec/java_homemi dà una risposta diversa dal readlinkcomando -based sopra, e il primo sembra essere corretto, in quanto contiene il cacertsfile.
Andrew Ferrier

1
@DanielSerodio e AndrewFerrier grazie ragazzi, risposta aggiornata.
Kuf

@Kuf My JDK non ha questa cartella lib / security su Mac Yosemite. Sono sicuro di essere nella giusta $ JAVA_HOME
Brian

1
Su OSX 10.10.5 la cartella della sicurezza è sotto: Home / jre / lib / security
Sid Sarasvati

47

A partire da OS X 10.10.1 (Yosemite), la posizione del cacertsfile è stata modificata in

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

9

Se è necessario accedere a tali certificati a livello di codice, è meglio non utilizzare affatto il file, ma accedervi tramite il gestore di fiducia. Il codice seguente proviene da un test case OpenJDK (che assicura che la raccolta cacerts compilata non sia vuota):

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

Quindi non devi occuparti del percorso del file o della password del keystore.


7

In MacOS Mojave, la posizione è:

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

Se si utilizza sdkman per gestire le versioni java, il file cacerts è in

~/.sdkman/candidates/java/current/jre/lib/security

NOTA: per le versioni correnti di sdkman con JDK 11, la posizione è~/.sdkman/candidates/java/current/lib/security
Snekse,

3

In High Sierra, il cacerts si trova in:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


1

Puoi anche consultare readlink -f " which java". Tuttavia potrebbe non funzionare per tutti i wrapper binari. È molto probabilmente meglio avviare effettivamente una classe Java.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.