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