Sto cercando come ottenere la posizione cacerts
dell'installazione java predefinita, quando non hai JAVA_HOME
o JRE_HOME
definito.
Ho bisogno di una soluzione che funzioni almeno per OS X
e Linux
.
Sì. java -v
si presume che funzioni :)
Risposte:
Sotto Linux , per trovare la posizione di $JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
la cacerts
sono sotto lib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
In mac OS X , per trovare $JAVA_HOME
esegui:
/usr/libexec/java_home
la cacerts
sono 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
/usr/libexec/java_home
mi dà una risposta diversa dal readlink
comando -based sopra, e il primo sembra essere corretto, in quanto contiene il cacerts
file.
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.
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
~/.sdkman/candidates/java/current/lib/security
/usr/libexec/java_home