115

cacerts当您没有JAVA_HOMEJRE_HOME未定义时,我正在研究如何获取默认 java 安装的位置。

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

是的。java -v假定工作:)

4

8 回答 8

195

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
于 2012-08-13T15:56:30.940 回答
51

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

$(/usr/libexec/java_home)/jre/lib/security/cacerts
于 2015-01-15T19:56:30.277 回答
12

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

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

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

于 2018-02-07T00:43:50.190 回答
10

在 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
于 2019-07-03T17:02:24.480 回答
3

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

于 2019-03-28T14:22:13.383 回答
3

Java 9以后,它在

${JAVA_HOME}/lib/security/cacerts

与通常的相反

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

于 2022-01-12T00:23:45.547 回答
1

也可以参考readlink -f " which java"。但是,它可能不适用于所有二进制包装器。实际启动一个 Java 类很可能会更好。

于 2015-01-15T20:00:16.777 回答
1

在 Ubuntu 20.04.3 LTS 中,cacerts位于:/etc/ssl/certs/java/cacerts

$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
$ ls -lah /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts*
/usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts -> /etc/ssl/certs/java/cacerts
于 2021-11-05T18:54:30.630 回答