我正在尋找如何獲取默認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