2012-08-13 158 views

回答

86

的Linux,找到$JAVA_HOME的位置:

readlink -f /usr/bin/java | sed "s:bin/java::" 

cacertslib/security/cacerts下:

$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts 

MAC OS X ,找到$JAVA_HOME运行:

/usr/libexec/java_home 

cacertsHome/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 
+4

在OS X中,“官方”查找JAVA_HOME的方法是运行'/ usr/libexec/java_home' – 2013-05-28 16:43:31

+2

@DanielSerodio,同意了。 '/ usr/libexec/java_home'给了我一个与上面'readlink'-based命令不同的答案,前者似乎是正确的,因为它包含'cacerts'文件。 – 2014-03-10 15:32:29

+1

@DanielSerodio和AndrewFerrier谢谢你们,回复更新。 – Kuf 2014-03-10 15:51:26

33

随着OS X 10.10.1(优胜美地)中,cacerts文件的位置已改为

$(/usr/libexec/java_home)/jre/lib/security/cacerts 
1

您也可以咨询的readlink - f“which java”。但它可能不适用于所有二进制包装。实际启动一个Java类最有可能更好。

0

如果您需要以编程方式访问这些证书,最好不要使用该文件,而是通过信任管理器访问它。下面的代码是从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(); 

所以你不必处理文件位置或库密码。

相关问题