Patrzę, jak uzyskać lokalizację cacertsdomyślnej instalacji Java, gdy nie masz JAVA_HOMElub nie JRE_HOMEzdefiniowano.
Potrzebuję rozwiązania, które działa przynajmniej w przypadku OS Xi Linux.
Tak. java -vzakłada się, że działa :)
Odpowiedzi:
W systemie Linux , aby znaleźć lokalizację $JAVA_HOME:
readlink -f /usr/bin/java | sed "s:bin/java::"
cacertspodlegają lib/security/cacerts:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
W systemie Mac OS X , aby znaleźć $JAVA_HOMErun:
/usr/libexec/java_home
cacertspodlegają Home/lib/security/cacerts:
$(/usr/libexec/java_home)/lib/security/cacerts
AKTUALIZACJA (OS X z JDK)
powyższy kod został przetestowany na komputerze bez zainstalowanego JDK. Po zainstalowaniu JDK, jak powiedział pR0Ps , jest to
$(/usr/libexec/java_home)/jre/lib/security/cacerts
/usr/libexec/java_homedaje mi inną odpowiedź niż readlinkpowyższa komenda bazująca na -bazie, a pierwsza wydaje się być poprawna, ponieważ zawiera cacertsplik.
Jeśli chcesz uzyskać dostęp do tych certyfikatów w sposób programowy, najlepiej w ogóle nie używać tego pliku, ale uzyskać do niego dostęp za pośrednictwem menedżera zaufania. Poniższy kod pochodzi z przypadku testowego OpenJDK (który zapewnia, że zbudowana kolekcja cacerts nie jest pusta):
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
Nie musisz więc zajmować się lokalizacją pliku ani hasłem do magazynu kluczy.
W systemie MacOS Mojave lokalizacja to:
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
Jeśli używasz sdkman do zarządzania wersjami Java, cacerts jest w
~/.sdkman/candidates/java/current/jre/lib/security
~/.sdkman/candidates/java/current/lib/security
/usr/libexec/java_home