2015-01-13 181 views
1

我想知道如何自簽名證書通常在SSL連接建立中檢查。SSL:瞭解自簽名證書

讓我們對self-signed certificates一看:

  • 客戶端和服務器提供其私鑰self-signed certificate(使用OpenSSL如創建)當serverclient收到"ClientHello"消息

  • ,他正在將其證書發送給客戶。

  • ServerHelloDone消息發送到客戶端,然後客戶端需要驗證證書。

當客戶端正在接收服務器證書時,他有哪些步驟來驗證此證書? 我知道自簽名證書一般不應該用於事實上沒有第三方實例(CA)來檢查。

客戶端是否只需接受服務器證書而無需任何進一步的步驟,或客戶端在連接建立之前是否已提供服務器「根」證書?

+0

您的最後一個子問題在自簽名證書的上下文中沒有意義(不確定您會說什麼「根」)。另外,'CertificateVerify'消息僅用於客戶端證書認證,與驗證服務器證書無關。 – Bruno

+0

這是一個想法如何自簽名證書得到驗證。當我在談論服務器「根」證書時,我將其視爲對CA證書的根證書(在非自簽名證書環境中)的替換。對不起有關'CertificateVerify'消息的錯誤;-)並感謝您的建議。 – Leviathan

+1

這個問題似乎是無關緊要的,因爲它不是關於編程或開發。也許你應該問[超級用戶](http://superuser.com/)或[信息安全協議棧交換](http://security.stackexchange.com/) – jww

回答

2

當客戶端正在接收服務器證書時,他有哪些步驟來驗證此證書?

客戶端執行證書鏈接引擎來驗證證書。重要檢查有: 1)證書籤名 2)證書主題。 「主題」字段中的CN屬性(或「主題備用名稱」中的適當名稱)必須與輸入的URL匹配。例如,您連接到www.example.com,則該名稱必須在主題和/或SAN擴展中列出。 3)證書有效性 4)證書撤銷 5)證書鏈直到受信任的根(以自簽名形式呈現) 6)在RFC5280中定義的其他檢查(包括但不限於:增強型密鑰使用,策略約束,名稱限制等)。

在自簽名證書的情況下,證書鏈由單個元素組成 - 服務器證書。在這種情況下,客戶端只跳過第4步,因爲自簽名證書不能被撤銷。此自簽名證書必須由客戶端顯式信任爲受信任的根證書,因爲所有自簽名證書都是根證書。

+0

因此,一個客戶端總是提供一個自簽名證書的服務器替換CA證書? – Leviathan

+1

通常,最終實體(如服務器)和根證書是單獨的證書。但是,RFC5280不限制同時使用單個證書作爲最終實體和根證書,因爲這些(服務器驗證和證書鏈驗證)是單獨的例程。自簽證書是正常情況。 – Crypt32

+0

就是這樣!感謝您參考RFC5280。 – Leviathan