https單向驗證應用廣泛想必大家都很熟悉,我已經在一篇博文中分享過,這次來看看Nginx如何實現雙向驗證。
單向驗證與雙向驗證的區別:
單向驗證: 指客戶端驗證服務器端證書,服務器并不需要驗證客戶端證書。
雙向驗證:指客戶端驗證服務器端證書,而服務器也需要通過CA的公鑰證書來驗證客戶端證書。
詳細的握手過程:
單向驗證
瀏覽器發送一個連接請求給安全服務器。
1、服務器將自己的證書,以及同證書相關的信息發送給客戶瀏覽器。
2、客戶瀏覽器檢查服務器送過來的證書是否是由自己信賴的CA中心所簽發的。如果是,就繼續執行協議;如果不是,客戶瀏覽器就給客戶一個警告消息:警告客戶這個證書不是可以信賴的詢問客戶是否需要繼續。
3、接著客戶瀏覽器比較證書里的消息,例如域名和公鑰,與服務器剛剛發送的相關消息是否一致,如果是一致的,客戶瀏覽器認可這個服務器的合法身份。
4、瀏覽器隨機產生一個用于后面通訊的“通話密鑰”,然后用服務器的公鑰對其加密,然后將加密后的“預主密碼”傳給服務器。
5、服務器從客戶發送過來的密碼方案中,選擇一種加密程度最高的密碼方案,用服務器的私鑰加密后通知瀏覽器。
6、瀏覽器針對這個密碼方案,接著用服務器的公鑰加過密后發送給服務器。
7、服務器接收到瀏覽器送過來的消息,用自己的私鑰解密,獲得。
8、服務器、瀏覽器接下來的通訊都是用對稱密碼方案,使用相同的對稱密鑰。
雙向驗證
1、瀏覽器發送一個連接請求給安全服務器。
2、服務器將自己的證書,以及同證書相關的信息發送給客戶瀏覽器。
3、客戶瀏覽器檢查服務器送過來的證書是否是由自己信賴的CA中心所簽發的。如果是,就繼續執行協議;如果不是,客戶瀏覽器就給客戶一個警告消息:警告客戶這個證書不是可以信賴的詢問客戶是否需要繼續。
4、接著客戶瀏覽器比較證書里的消息,例如域名和公鑰,與服務器剛剛發送的相關消息是否一致,如果是一致的,客戶瀏覽器認可這個服務器的合法身份。
5、服務器要求客戶的身份認證,用戶可以建立一個隨機數然后對其進行數字簽名,將這個含有簽名的隨機數和客戶自己的證書以及加密過的“預主密碼”一起傳給服務器。
6、服務器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的CA 是否可靠,發行CA 的公鑰能否正確解開客戶證書的發行CA的數字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,服務器將用自己的私鑰解開加密的“預主密碼”,然后執行一系列步驟來產生主通訊密碼(客戶端也將通過同樣的方法產生相同的主通訊密碼)。
新聞熱點
疑難解答