如果您没有定义cacerts
或JAVA_HOME
,我正在研究如何获取默认java安装的JRE_HOME
的位置。
我需要一个至少适用于OS X
和Linux
的解决方案。
是。假设java -v
起作用:)
答案 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