我正在寻找如何获取默认java安装的cacerts
的位置,当您没有定义JAVA_HOME
或JRE_HOME
时。如何获取默认java安装的cacerts的位置?
我需要一个至少适用于OS X
和Linux
的解决方案。
是的。 java -v
被假定为工作:)
我正在寻找如何获取默认java安装的cacerts
的位置,当您没有定义JAVA_HOME
或JRE_HOME
时。如何获取默认java安装的cacerts的位置?
我需要一个至少适用于OS X
和Linux
的解决方案。
是的。 java -v
被假定为工作:)
在的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
UPDATE(与JDK OS X)
上述代码被计算机上测试没有安装JDK。 随着JDK安装,as pR0Ps said,它在
$(/usr/libexec/java_home)/jre/lib/security/cacerts
随着OS X 10.10.1(优胜美地)中,cacerts
文件的位置已改为
$(/usr/libexec/java_home)/jre/lib/security/cacerts
您也可以咨询的readlink - f“which java
”。但它可能不适用于所有二进制包装。实际启动一个Java类最有可能更好。
如果您需要以编程方式访问这些证书,最好不要使用该文件,而是通过信任管理器访问它。下面的代码是从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();
所以你不必处理文件位置或库密码。
在OS X中,“官方”查找JAVA_HOME的方法是运行'/ usr/libexec/java_home' – 2013-05-28 16:43:31
@DanielSerodio,同意了。 '/ usr/libexec/java_home'给了我一个与上面'readlink'-based命令不同的答案,前者似乎是正确的,因为它包含'cacerts'文件。 – 2014-03-10 15:32:29
@DanielSerodio和AndrewFerrier谢谢你们,回复更新。 – Kuf 2014-03-10 15:51:26