2011-04-24 116 views
0

當我使用https登錄到我的銀行帳戶時,在輸入我的登錄信息之前,它只是服務器端的SSL驗證。我的瀏覽器在SSL會話期間根據來自服務器的證書信息進行服務器認證。我不需要手動導入服務器證書作爲我的瀏覽器中的可信證書。它只是在SSL交換期間的運行時發生。PKI證書導入

另一方面,我還看到了一些應用程序,當您查看他們的安裝指南時,必須手動導入證書(例如,使用keytool)。

問題是:如果在SSL會話開始時交換了證書信息,則每一方都有足夠的信息來驗證另一方的身份。爲什麼某些應用程序需要在客戶端和服務器之間手動導入彼此的證書。無論是雙方認證還是雙方認證。

基於以下回復的其他信息: 我指的是我安裝基於客戶端 - 服務器模型的商業軟件並且客戶端SSL認證已打開的場景。我在機器A上安裝了服務器,在不同的機器上安裝了2個客戶機,這些都在我的專用網絡中。在安裝過程中,服務器在本地生成自簽名證書。所以2個客戶也是如此。一旦安裝完成,我被要求將客戶的證書複製到服務器機器,並手動將它們作爲可信證書導入。另外,將服務器證書複製到客戶端計算機,並將其導入其可信存儲區。他們在java keytool之上提供了一個包裝工具來執行證書導入。 爲什麼在這裏需要手動導入?客戶端和服務器無論如何都將在SSL握手期間交換證書信息並執行身份驗證。再次,這些是自簽證書和CA所涉及的。

回答

0

請注意,證書由證書頒發機構簽署,因此它取決於您的瀏覽器信任的證書頒發機構。如果Web服務器發送由瀏覽器/應用程序信任的證書頒發機構簽發的證書並且證書有效,則不應該收到任何警告。另一方面,如果瀏覽器從Web服務器接收到證書,並且它不信任簽署該證書的證書頒發機構,瀏覽器將採取一些行動 - 至少它應該警告您這個。從網站導入證書時,基本上告訴瀏覽器您已決定信任該證書,而不管簽名者是誰。

編輯:同樣的推理適用於:密鑰庫保存可信認證機構及其相應證書的列表。 PKI的整個概念是具有可信的層次結構爲其他方發出簽名證書的CA.如果證書是自簽名的,那麼就沒有有效的信任鏈 - Java如何知道證書沒有被攻擊者僞造?

假設客戶端與Web服務器之間的連接由於在SSL握手期間交換了證書而被隱式信任。如果中間的一個人構成Web服務器,而不是發送服務器證書,而是發送自己的證書呢?客戶如何知道中間人收到的證書是不可信的?如果證書由受信任的CA簽署,或者證書已作爲可信證書手動添加到密鑰庫中,則客戶端可以檢查它是否應該信任該證書。

+0

夠公平的。但在我解釋的場景中,只有SSL客戶端身份驗證已打開。有什麼需要將服務器證書導入客戶端?您只需將客戶端證書導入服務器。 – tushima 2011-04-24 08:55:08

+0

@tushima在SSL中,始終需要和驗證服務器證書。只有客戶端證書是可選的。如果服務器證書未通過驗證,則中間的人可以模擬服務器。 – 2011-04-24 09:02:28

+0

太棒了。感謝您提醒我SSL基礎知識! – tushima 2011-04-24 09:18:07

0

SSL服務器的證書必須由證書頒發機構(CA)「擔保」。您的瀏覽器(或其他程序)包含它所信任的CA列表。如果您使用的站點是而不是,則需要導入其CA,以便驗證成功。

沒有合法的網站(尤其是網上銀行)應該要求您使用「替代」CA.只有在您未發送超敏感數據的網站上執行此操作。