2011-04-09 102 views

回答

4

首先,我們需要區分服務器端和客戶端證書。

在大多數情況下,只使用服務器端證書。它用於讓客戶端通過驗證服務器的證書來驗證客戶端連接的服務器的真實性(驗證過程將在下面進行描述)。這樣做應該可以防止中間人(MITM)攻擊。

當我們需要限制對服務器的訪問時,僅使用一些用戶集合來使用客戶端證書。爲此,客戶端使用證書進行身份驗證。由於用戶集合通常是有限的(通過一些標準,在現實生活中可能會非常大),驗證過程通常與服務器證書驗證過程有點不同。

接下來,關於驗證本身。

當驗證服務器的客戶端證書,客戶端採用以下步驟:

  1. 查找發佈者(CA)證書和檢查服務器的使用證書頒發者的簽名證書(技術細節跳過)。
  2. 檢查證書有效期(從何時到何時證書應被接受)。
  3. 檢查證書的使用目的(每個證書只能用於某些目的)。
  4. 檢查證書是否已針對服務器所在的域名(或IP地址)頒發。
  5. 檢查證書是否未被CA取消(吊銷)。這是通過檢查證書吊銷列表(CRL)和使用OCSP協議發送即時請求完成的。
  6. 由於CRL和OCSP響應使用證書進行簽名,因此它們的簽名也如上所述進行了驗證。
  7. 對步驟(1)中提到的CA證書重複該過程,並且這種情況持續進行,直到您獲得受信任的根CA證書(假定客戶端具有一組受信任的根證書)。

當服務器驗證客戶端證書時,通常會簡化上述過程,因爲相同的系統是CA,並且驗證了服務器的訪問權限。在這種情況下,可以將證書直接與允許的證書列表進行匹配,否則以上大多數步驟都可能是不必要的。

8

非常sipmly放有小故事

客戶:「你好,這裏是我的加密信息」 (連接到服務器,並伸出它的手)

服務器 :(收到客戶端)「您好,以下是我的加密詳細信息,下面是我的證書。」 (握手協商完成,客戶端檢查證書)

客戶端:好的,這是我的鑰匙!所以從現在起,所有的東西都使用這個密鑰加密。好?

服務器:好的! (SSL握手完成)

客戶端:太棒了,這是通過HTTP傳輸的數據!

Certificates用於SSL handshake。服務器交給客戶端的證書是signed by Certificate Authority(CA),如VeriSign,並且是特定於服務器的。在SSL握手中會發生各種檢查。需要了解的重要信息之一是通用名稱證書的屬性必須與服務器的主機/ DNS名稱相匹配。

客戶端擁有CA的public certificate (key)的副本,因此可以使用它(以SHA1爲例計算)以查看服務器的證書是否仍然正常。