我正在研究如何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