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:
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
/usr/libexec/java_homemi dà una risposta diversa dal readlinkcomando -based sopra, e il primo sembra essere corretto, in quanto contiene il cacertsfile.
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