Я ищу, как получить местоположение cacerts
установки Java по умолчанию, если у вас его нет JAVA_HOME
или нет JRE_HOME
.
Мне нужно решение, которое работает хотя бы для OS X
и Linux
.
Да. java -v
предполагается, что работает :)
Под Linux , чтобы найти расположение $JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
cacerts
находятся lib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
В Mac OS X , чтобы найти $JAVA_HOME
запуск:
/usr/libexec/java_home
cacerts
находятся Home/lib/security/cacerts
:
$(/usr/libexec/java_home)/lib/security/cacerts
ОБНОВЛЕНИЕ (OS X с JDK)
Приведенный выше код был протестирован на компьютере без установленного JDK. С установленным JDK, как сказал pR0P , он находится на
$(/usr/libexec/java_home)/jre/lib/security/cacerts
/usr/libexec/java_home
/usr/libexec/java_home
дает мне ответ, отличный от приведеннойreadlink
выше команды -based, и первая кажется правильной, поскольку она содержитcacerts
файл.Начиная с OS X 10.10.1 (Yosemite), расположение
cacerts
файла было изменено наисточник
Если вам нужно получить доступ к этим сертификатам программно, лучше вообще не использовать файл, а получить к нему доступ через диспетчер доверия. Следующий код взят из тестового примера OpenJDK (который проверяет, что созданная коллекция cacerts не пуста):
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("PKIX"); trustManagerFactory.init((KeyStore) null); TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); X509TrustManager trustManager = (X509TrustManager) trustManagers[0]; X509Certificate[] acceptedIssuers = trustManager.getAcceptedIssuers();
Таким образом, вам не нужно иметь дело с местоположением файла или паролем хранилища ключей.
источник
В MacOS Mojave это расположение:
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
Если для управления версиями Java используется sdkman, cacerts находится в
источник
~/.sdkman/candidates/java/current/lib/security
В High Sierra cacerts находится по адресу:
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts
источник
Вы также можете обратиться к readlink -f "
which java
". Однако это может не работать для всех двоичных оболочек. Скорее всего, лучше запустить класс Java.источник