如何获取默认java安装的cacerts的位置?

时间:2012-08-13 14:45:55

标签: java security

如果您没有定义cacertsJAVA_HOME,我正在研究如何获取默认java安装的JRE_HOME的位置。

我需要一个至少适用于OS XLinux的解决方案。

是。假设java -v起作用:)

6 个答案:

答案 0 :(得分:121)

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

更新(带有JDK的OS X)

上面的代码是在未安装JDK的计算机上测试的。 安装了JDK as pR0Ps said,它位于

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

答案 1 :(得分:40)

自OS X 10.10.1(Yosemite)起,cacerts文件的位置已更改为

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

答案 2 :(得分:4)

如果您需要以编程方式访问这些证书,最好不要使用该文件,而是通过信任管理器访问它。以下代码来自OpenJDK Test案例(确保构建的cacerts集合不为空):

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

因此您无需处理文件位置或密钥库密码。

答案 3 :(得分:2)

在高塞拉山脉,证书位于:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts

答案 4 :(得分:1)

您也可以参考readlink -f" which java"。但是它可能不适用于所有二进制包装器。实际上启动Java类最好。

答案 5 :(得分:1)

在MacOS Mojave中,位置为:

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

如果使用sdkman管理Java版本,则cacerts位于

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