2012-08-13 78 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(); 

所以你不必處理文件位置或庫密碼。

相關問題