Eu estou procurando como obter a localização da cacerts
instalação padrão do java, quando você não tem JAVA_HOME
ou JRE_HOME
definido.
Preciso de uma solução que funcione pelo menos para OS X
e Linux
.
Sim. java -v
presume-se que funcione :)
Respostas:
No Linux , para encontrar a localização de $JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
o cacerts
estão sob lib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
No mac OS X , para encontrar $JAVA_HOME
run:
/usr/libexec/java_home
o cacerts
estã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_home
me dá uma resposta diferente do readlink
comando -baseado acima, e o primeiro parece estar correto, pois contém o cacerts
arquivo.
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