2014-02-21 24 views
3

我在該位置有一個cacerts文件(/usr/java/jdk1.6.0_29/jre/lib/security/cacerts),因此我的java應用程序在此位置搜索密鑰庫文件。將cacerts文件保存在JRE外的位置有什麼好處?

但是考慮到我的Java版本非常陳舊,並且只有在JRE升級的情況下(這取決於開發者的優先級),cacerts文件纔會更新CA根證書,我知道我的Java應用程序會當一些外部第三方引入了我的cacerts文件中不存在的新的第三方證書時會受到影響。

因此,在查看幾個選項時,我發現我需要使用屬性-Djavax.net.ssl.trustStore並將其值設置爲JRE外部的cacerts文件的位置。這樣應用程序就可以搜索JRE外部的cacerts文件,然後將其引用到我的默認cacerts文件中。

所以我的問題是爲什麼這樣做?將它保持在JRE外部(使其獨立於JRE?)的優勢是什麼?

因爲它獨立於JRE,它不會尋找新的第三方根證書,因此我的JAVA應用程序不會受到影響?

或者它必須對屬性'javax.net.ssl.trustStore'進行一些操作。我已經提及this

但是有人能讓我明白這一點,因爲我沒有清楚地瞭解這一點。

+0

密鑰庫是「固定的」;一旦它被創建,它就不會被修改,除非你手動修改它(使用適當的工具)。外部密鑰庫允許您自定義您希望認爲有效的CA列表;它將對你創建的所有SSLSocket有效,因爲你的密鑰庫不能識別CA會阻止建立連接。然而,我覺得這比我在這裏解釋的更多... – fge

+0

所以我想知道的是,如果我使用一些第三方CA證書,並且它們出現在我的密鑰庫中,那麼事情就很好。但是,如果引入了新證書,並且它們不存在於使用屬性javax.net.ssl.trustStore的Keystore中,即使我的密鑰存儲庫沒有新證書,也可以幫助影響我的應用程序......? –

+0

嗯,他們是,只要密鑰庫包含所有直到根的鏈元素 – fge

回答

1

其優點是它使用戶可以設置此應用程序完全控制該信任庫。

  • 您需要使用不在默認包(如企業CA)的其他CA證書,但不希望改變默認cacerts文件:尤其是,如果這是非常有用的,你可能沒有行政訪問此文件,或者您可能不希望對使用該JRE的其他Java應用程序進行更改。
  • 您希望比默認列表更嚴格,並刪除一些您不需要和信任的CA.

缺點是您需要在發生事件後刪除部分CA列表時查看CA列表。

或者,如果環境中可用,也可以考慮using the platform's CA certificates(儘管WINDOWS-ROOT不幸有幾個錯誤)。有些Linux發行版也有a separate CA bundle

相關問題