1. 程式人生 > >SSL互動(握手)過程詳解

SSL互動(握手)過程詳解



原文:http://www.cpplive.com/html/1387.html

普通的TCP通訊無法保證資料的安全,它隨時可能被第三方截獲而洩漏通訊雙方之間的隱私,這顯然是我們不希望看到的,尤其在跟使用者名稱、密碼、個人資訊息息相關的通訊過程(如網上銀行交易、機密檔案傳輸等等)尤其看重資料互動的隱祕性,所以我們常常用SSL協議來建立安全保密的通訊,SSL協議能夠保證互動雙方的資料按密文方式傳輸,第三方在沒有私鑰的情況下幾乎無法破解,從而到達保密的目的。究竟SSL是如何互動資料來確保安全的,很多人卻不得而知,為了解答大家的疑惑,這裡詳細介紹一下SSL的互動過程。

1、建立TCP連線

由於

SSL協議依賴於TCP連線實施,所以在SSL互動之前需要先建立TCP連線。客戶端connect服務端,服務端acccept客戶端,經歷三次握手以後TCP連線建立。

2、客戶端傳送SSL請求

客戶端(Client)向服務端(Server)傳送自身使用的SSL版本SSL一共有三個版本)、加密演算法的相關配置、隨機資料以及其在在SSL協議中需要用到的資訊。

3、服務端處理SSL請求

伺服器(Server)反饋給客戶端(Client)自己的SSL版本、加密演算法的相關配置、隨機資料以及用自己的私有金鑰加密的SERVER-HELLO資訊。服務端(Server)緊接著將自己的證書(包含公共金鑰)傳遞過去。同時有個可選專案,即服務端(

Server)可以要求客服端(Client)傳送自己的證書。
4
、客戶端驗證服務端身份

客服端(Client)用服務端(Server)傳遞過來證書驗證服務端(Server)的身份,如果身份未驗證通過則結束本次通訊。證書驗證通過後利用服務端(Server)的公共金鑰嘗試解開被其用私有金鑰加密過的SERVER-HELLO資訊,如果解開失敗,說明該SERVER-HELLO必然是假的,故結束本次通訊。

5、客戶端傳送公共金鑰加密過的隨機資料

客戶端端(Client)生成隨機資料(sharedsecret),並且把這個隨機資料用服務端(Server)傳送過來的的公共金鑰加密,此次加密過程產生本次握手中的

premastersecret(這個步驟是有可能有服務端的參與的,具體情況由他們使用的加密演算法決定),然後將它(premastersecret)送回給服務端(Server)。如果服務端(Server)要求需要驗證客戶端(Client),那麼客服端(Client)也需要自己把自己的證書(包含公共金鑰)傳遞過去,同時送一些自己簽過名(私有金鑰加密)的資料過去。

6、服務端用私有金鑰解密加密後的隨機資料並協商暗號

Server驗證完client的身份之後,然後用自己的私有金鑰解密得到premastersecret然後雙方利用這個premastersecret來共同協商,得到mastersecret(可理解為premastersecret為雙方協商的暗號,然後使用這個暗號再協商一個mastersecret用來產生真正的會話金鑰用來傳輸資料)以此來保證資料的決對安全。

7、服務端跟客戶端利用暗號生成加密演算法跟金鑰key

雙方用mastersecret一起產生真正的sessionkey,這將是一個對稱加密的key。這個key還可以用來驗證資料完整性。雙方再交換結束資訊。握手結束。

接下來雙方就可以用協商好的演算法和金鑰key,採用對稱加密演算法來通訊了。