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

sor*_*rin 75 java security

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

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

是.java -v假设工作:)

Kuf*_*Kuf 134

Linux下,找到以下位置$JAVA_HOME:

readlink -f /usr/bin/java | sed "s:bin/java::"
Run Code Online (Sandbox Code Playgroud)

以下cacertslib/security/cacerts:

$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)

mac OS X下,找到$JAVA_HOMErun:

/usr/libexec/java_home
Run Code Online (Sandbox Code Playgroud)

以下cacertsHome/lib/security/cacerts:

$(/usr/libexec/java_home)/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)

更新(OS X与JDK)

上面的代码是在未安装JDK的计算机上测试的.随着JDK的安装,正如pR0P所说的那样

$(/usr/libexec/java_home)/jre/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)

  • 在OS X中,找到JAVA_HOME的"官方"方式是运行`/ usr/libexec/java_home` (6认同)
  • @DanielSerodio同意了.`/ usr/libexec/java_home`给出了我上面基于`readlink`的命令的不同答案,前者似乎是正确的,因为它包含`cacerts`文件. (2认同)

pR0*_*0Ps 41

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

$(/usr/libexec/java_home)/jre/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)


jum*_*key 16

Java 9现在起,它在

${JAVA_HOME}/lib/security/cacerts

与平常相反

${JAVA_HOME}/jre/lib/security/cacerts


Nis*_*ish 10

在 MacOS Mojave 中,位置为:

/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts 
Run Code Online (Sandbox Code Playgroud)

如果使用 sdkman 管理 java 版本,则 cacerts 在

~/.sdkman/candidates/java/current/jre/lib/security
Run Code Online (Sandbox Code Playgroud)

  • 注意:对于当前版本的 sdkman w/ JDK 11,位置为 `~/.sdkman/candidates/java/current/lib/security` (2认同)

小智 7

在 High Sierra,cacerts位于:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts


eck*_*kes 5

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

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

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