Eu estou procurando como obter a localização da cacertsinstalação padrão do java, quando você não tem JAVA_HOMEou JRE_HOMEdefinido.
Preciso de uma solução que funcione pelo menos para OS Xe Linux.
Sim. java -vpresume-se que funcione :)
Respostas:
No Linux , para encontrar a localização de $JAVA_HOME:
readlink -f /usr/bin/java | sed "s:bin/java::"
o cacertsestão sob lib/security/cacerts:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
No mac OS X , para encontrar $JAVA_HOMErun:
/usr/libexec/java_home
o cacertsestão sob Home/lib/security/cacerts:
$(/usr/libexec/java_home)/lib/security/cacerts
ATUALIZAÇÃO (OS X com JDK)
o código acima foi testado em um computador sem JDK instalado. Com o JDK instalado, como pR0Ps disse , é
$(/usr/libexec/java_home)/jre/lib/security/cacerts
/usr/libexec/java_homeme dá uma resposta diferente do readlinkcomando -baseado acima, e o primeiro parece estar correto, pois contém o cacertsarquivo.
Se você precisar acessar esses certificados programaticamente, é melhor não usar o arquivo, mas acessá-lo por meio do gerenciador de confiança. O código a seguir é de um caso de teste OpenJDK (que garante que a coleção cacerts construída não esteja vazia):
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
Assim, você não precisa lidar com a localização do arquivo ou a senha do keystore.
No MacOS Mojave, a localização é:
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
Se estiver usando sdkman para gerenciar versões java, o cacerts está em
~/.sdkman/candidates/java/current/jre/lib/security
~/.sdkman/candidates/java/current/lib/security
/usr/libexec/java_home