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


91

我正在研究如何cacerts在没有JAVA_HOME或没有JRE_HOME定义时如何获取默认java安装的位置。

我需要至少适用于OS X和的解决方案Linux

是。java -v被认为可以工作:)

Answers:


156

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的计算机上进行了测试。如pR0Ps所说,安装了JDK后,它位于

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

6
在OS X中,运行JAVA_HOME的“官方”方法正在运行/usr/libexec/java_home
Daniel Serodio

2
@DanielSerodio,表示同意。/usr/libexec/java_home给了我与readlink上面的-based命令不同的答案,前者似乎是正确的,因为它包含cacerts文件。
Andrew Ferrier 2014年

1
@DanielSerodio和AndrewFerrier谢谢大家,回答更新了。
Kuf 2014年

@Kuf我的JDK在Mac Yosemite上没有此lib / security文件夹。我肯定自己在正确的$ JAVA_HOME中
Brian

1
在OSX 10.10.5上,安全文件夹位于:Home / jre / lib / security
Sid Sarasvati

47

从OS X 10.10.1(Yosemite)开始,cacerts文件的位置已更改为

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

9

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

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

因此,您不必处理文件位置或密钥库密码。


7

在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

注意:对于当前版本的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类。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.