2011-04-18 23 views
34

我對cacertsjssecacerts文件之間的差異感到非常困惑。爲什麼java有cacerts和jssecacerts兩個文件?

我知道默認情況下java會查找jssecacerts文件,然後查找cacerts文件。

但是jssecacerts文件有什麼意義?

我的理解是,如果需要使用新的信任庫,那麼應該創建cacerts的副本,並將所有新的可信CA添加到該副本中。 cacerts(帶有新的CA)的副本應該被-Djavax.net.ssl.trustStore系統屬性引用。這樣,在該機器上運行的其他java應用程序不會意外地信任非默認的CA.

+0

你真的找不到3個答案是正確的嗎?你能選擇一個你認爲正確的嗎? – JoeG 2016-07-13 12:36:25

回答

4

好問題。我認爲它源於歷史事實,JSSE曾經是一個附加組件。 JSSE確實允許多個提供者,所以也許jssecacerts僅用於JSSE提供者,並且其他提供者可以使用他們自己的。

但是誰在JSSE之前使用過cacerts是另一個問題。

9

據我所知,cacerts文件是發貨的默認文件。

如果有一個jssecacerts文件,它將被專門用於 - 不是除了cacerts文件。

我的推薦:保留cacerts文件,複製到jssecacerts並添加所需的任何私人CA /簽署證書jssecacerts文件。

+0

感謝你們,我也發現如果jssecacerts文件存在,那麼在cacerts中擁有CA不起作用,並且它需要添加到jssecacerts中。 – 2014-01-20 02:38:48

+0

@EJP你不是「發泄」運送的jssecacerts文件。沒有jssecacerts文件出貨。通過將cacerts複製到jssecacerts,Java現在將使用jssecacerts。現在,您可以使用'keytool'從jssecacerts添加/遠程證書,而無需擔心隨Java改變默認值(cacerts)。撤銷任何更改與從目錄中刪除jssecacerts一樣簡單。 – DeezCashews 2014-08-13 13:15:29

22

Java™ Secure Socket Extension (JSSE) Reference GuideTrustManagerFactory使用下列步驟來嘗試找到信任材料:

  1. 系統屬性javax.net.ssl.trustStore
  2. java-home/lib/security/jssecacerts
  3. java-home/lib/security/cacerts(默認發貨)

我覺得這基於約定而不是配置概念。沒有額外的編碼工作,cacert將被使用。對於額外的專用CA /簽名證書,開發人員可以使用第一種或第二種方式,前者可能只包含特定的證書,但後來包含證書列表。

+4

這個問題一旦發現1,2或3它就使用它,所以jssecacerts需要包含所有的證書(如果使用的話)。 – JoeG 2016-07-13 12:38:10

相關問題