Як отримати розташування катерців встановленої за замовчуванням програми Java?


91

Я розглядаю, як отримати місце розташування встановленої cacertsза замовчуванням програми Java, коли у вас її немає JAVA_HOMEабо JRE_HOMEвизначено.

Мені потрібне рішення, яке працює принаймні для OS Xта Linux.

Так. java -vпередбачається, що працює :)

Відповіді:


158

Під 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

6
В OS X працює "офіційний" спосіб знайти JAVA_HOME/usr/libexec/java_home
Даніель Серодіо

2
@DanielSerodio, погодився. /usr/libexec/java_homeдає мені відповідь, відмінну від команди readlink-based вище, і перша, здається, є правильною, оскільки вона містить cacertsфайл.
Andrew Ferrier

1
@DanielSerodio та AndrewFerrier дякую хлопці, відповідь оновлена.
Куф

@Kuf My JDK не має цієї папки lib / security на Mac Yosemite. Я впевнений, що перебуваю в праві $ JAVA_HOME
Брайан

1
На OSX 10.10.5 папка безпеки знаходиться в розділі: Home / jre / lib / security
Sid Sarasvati

47

Станом на OS X 10.10.1 (Йосеміті), розташування cacertsфайлу було змінено на

$(/usr/libexec/java_home)/jre/lib/security/cacerts

9

Якщо вам потрібен програмний доступ до цих сертифікатів, краще взагалі не використовувати файл, а отримати до нього доступ через менеджер довіри. Наступний код з тестового випадку OpenJDK (що гарантує, що вбудована колекція кацерт не є порожньою):

TrustManagerFactory trustManagerFactory =
    TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
    trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
    (X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
    trustManager.getAcceptedIssuers();

Тож вам не доведеться мати справу з розташуванням файлів або паролем сховища ключів.


Це не читання сертифіката, встановленого в кацертах. я можу, якщо використовую шлях до файлу та пароль
Somnath Singh

7

У MacOS Mojave місце розташування:

/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts 

Якщо для керування версіями Java використовується sdkman, кодексів є

~/.sdkman/candidates/java/current/jre/lib/security

ПРИМІТКА: Для поточних версій sdkman w / JDK 11 місцезнаходження~/.sdkman/candidates/java/current/lib/security
Snekse

3

У Високій Сьєррі кацерти розташовані за адресою:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


1

Ви також можете звернутися до readlink -f " which java". Однак це може не працювати для всіх двійкових обгортків. Швидше за все, краще насправді запустити клас Java.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.