10. PKI - HTTPS單向認證和雙向認證
- 1. 單項認證
- 2. 雙向認證
- 參考
所謂的HTTPS單項認證和雙向認證,其實是SSL/TLS的單項認證和雙向認證。在8. PKI - SSL/TLS Handshake Protocol(TLS握手詳解)已經對TLS協定有了一個比較詳細的介紹。那單向認證和雙向認證是怎麼回事呢?
其實可以簡單的了解為:
- 單項認證是用戶端要對伺服器進行認證;
- 雙向認證是用戶端要對伺服器進行認證,同時伺服器也要對用戶端進行認證。
單項認證多用于B2C模式;雙向認證多用于B2B模式。
下面從TLS封包角度對單項認證做一下分析:
1. 單項認證
如下圖單項認證的封包中,虛線部分是省略掉的可選封包。其大緻過程如下:
1)用戶端發起ClientHello;
2)服務端回應SeverHello,該過程中伺服器會将自己的證書發送給用戶端;
3)用戶端回應:用戶端收到後,檢查證書是否合法,主要檢查下面4點:
- 檢查證書是否過期
- 檢查證書是否已經被吊銷
- 證書是否可信
- 檢查收到的證書中的域名與請求的域名是否一緻
4)伺服器的最後回應

2. 雙向認證
在雙向認證的封包中,多了一下三個封包:
- Client Certificate Request
- Client Certificate
- Certificate Verify
1)Client Certificate Request:伺服器在SeverHello消息中,會要求用戶端提供“用戶端的證書”
2)Client Certificate:用戶端發送證書給伺服器
3)Certificate Verify:用戶端将之前所有收到的和發送的消息組合起來,并用hash算法得到一個hash值,然後用用戶端的私鑰對這個hash進行簽名,并發送給伺服器
伺服器收到用戶端證書後:
a)驗證用戶端證書的合法性,如果驗證不通過則會拒絕連接配接;
b)用用戶端證書中的公鑰去驗證收到的Certificate Verify消息中的簽名。這一步的作用是為了确認證書确實是用戶端的。
參考
HTTPS實戰之單向驗證和雙向驗證