我正在研究如何cacerts在没有JAVA_HOME或没有JRE_HOME定义时如何获取默认java安装的位置。
我需要至少适用于OS X和的解决方案Linux。
是。java -v被认为可以工作:)
Answers:
在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
/usr/libexec/java_home给了我与readlink上面的-based命令不同的答案,前者似乎是正确的,因为它包含cacerts文件。
如果您需要以编程方式访问那些证书,则最好根本不使用该文件,而是通过信任管理器访问该文件。以下代码来自OpenJDK 测试用例(它确保内置的cacerts集合不为空):
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
因此,您不必处理文件位置或密钥库密码。
/usr/libexec/java_home