Patrzę, jak uzyskać lokalizację cacerts
domyślnej instalacji Java, gdy nie masz JAVA_HOME
lub nie JRE_HOME
zdefiniowano.
Potrzebuję rozwiązania, które działa przynajmniej w przypadku OS X
i Linux
.
Tak. java -v
zakłada się, że działa :)
W systemie Linux , aby znaleźć lokalizację $JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
cacerts
podlegają lib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
W systemie Mac OS X , aby znaleźć $JAVA_HOME
run:
/usr/libexec/java_home
cacerts
podlegają 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_home
/usr/libexec/java_home
daje mi inną odpowiedź niżreadlink
powyższa komenda bazująca na -bazie, a pierwsza wydaje się być poprawna, ponieważ zawieracacerts
plik.W systemie OS X 10.10.1 (Yosemite) lokalizacja
cacerts
pliku została zmieniona naźródło
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.
źródło
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
źródło
~/.sdkman/candidates/java/current/lib/security
W High Sierra cacerts znajduje się pod adresem:
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts
źródło
Możesz także sprawdzić readlink -f "
which java
". Jednak może to nie działać dla wszystkich opakowań binarnych. Najprawdopodobniej lepiej jest faktycznie rozpocząć klasę Java.źródło