2012-09-19 71 views
1

大多數支持SSL的Web瀏覽器都有一個CA列表,這些CA的證書將自動接受。如果瀏覽器遇到其授權CA位於列表中的證書,瀏覽器將自動接受該證書,並建立到該站點的SSL連接。Java應用程序如何無縫接受服務器證書?

有一個運行在JBoss 7上的Java 1.6客戶端,它需要SSL連接到LDAP服務器。由於客戶端正在生產,如果LDAP服務器更新其證書而不通知我在JBoss上相應地更新證書,則客戶端將失敗。我的問題是:如何以類似瀏覽器無縫接受證書的方式安全連接(SSL)到LDAP?

我不知道這在Java中是否可行。但是,任何想法和反饋都是受歡迎的。

回答

1

Java具有包含所有可信證書的默認信任庫。這是在%JRE_HOME%\lib\security\cacert下,並具有所有可信的CA證書(Verisign等)。
因此,如果您的客戶端https應用程序嘗試連接到部署由這些發佈者簽名的證書的服務器,則不會有任何問題(與您的瀏覽器相同)。
現在你的問題。您沒有提及有關您的LDAP服務器的足夠信息。
我能想到以下幾點:

  1. LDAP服務器部署一些CA(不 的一個已知的)簽署的證書。
  2. LDAP服務器部署了自簽名證書

對於情況(1)所有你需要做的就是簽名者證書添加到您的信任(即簽署了issure證書您的LDAP服務器的證書)。如果LDAP服務器更改了證書,那麼只要它從您現在已經設置爲可信的相同CA獲得證書,就不會受到影響。可以在cacerts中添加此可信證書,但建議的解決方案是使用您自己的單獨信任庫,將其導入並將其設置在JVM中以覆蓋默認的cacerts。 Google中有很多例子。

對於情況(2),這是一個非常糟糕的設置,並且很麻煩,因爲每次LDAP服務器更改證書時都需要手動實際更新信任庫。

但是無論如何,我只能假設證書因失效而改變?我想不出另外一個原因(私鑰的妥協除外,但這不是你描述中的問題)

+0

LDAP證書由知名CA簽署。證書因過期而更改。我認爲解決方案將是案例1的建議,對嗎? 「...將簽名者的證書添加到您的信任庫...」這是否也被稱爲「根證書」? –

+0

@WillL:你可以看到這個着名的CA是否已經包含在java的默認信任庫中。如果是的話,你應該可以。如果不是,那麼我建議你不要導入它,而是配置一個信任庫該CA的證書 – Cratylus

+0

Cratylus,實際上它是一個新的證書。在java中,我可以建立到LDAP的安全連接,並且Java客戶端會接受並保存證書,而無需手動更新客戶端上的證書?這是否過於雄心勃勃? -thx –

相關問題