SSL互動(握手)過程詳解
原文:http://www.cpplive.com/html/1387.html
普通的TCP通訊無法保證資料的安全,它隨時可能被第三方截獲而洩漏通訊雙方之間的隱私,這顯然是我們不希望看到的,尤其在跟使用者名稱、密碼、個人資訊息息相關的通訊過程(如網上銀行交易、機密檔案傳輸等等)尤其看重資料互動的隱祕性,所以我們常常用SSL協議來建立安全保密的通訊,SSL協議能夠保證互動雙方的資料按密文方式傳輸,第三方在沒有私鑰的情況下幾乎無法破解,從而到達保密的目的。究竟SSL是如何互動資料來確保安全的,很多人卻不得而知,為了解答大家的疑惑,這裡詳細介紹一下SSL的互動過程。
1、建立TCP連線
由於
2、客戶端傳送SSL請求
客戶端(Client)向服務端(Server)傳送自身使用的SSL版本(SSL一共有三個版本)、加密演算法的相關配置、隨機資料以及其在在SSL協議中需要用到的資訊。
3、服務端處理SSL請求
伺服器(Server)反饋給客戶端(Client)自己的SSL版本、加密演算法的相關配置、隨機資料以及用自己的私有金鑰加密的SERVER-HELLO資訊。服務端(Server)緊接著將自己的證書(包含公共金鑰)傳遞過去。同時有個可選專案,即服務端(
4、客戶端驗證服務端身份
客服端(Client)用服務端(Server)傳遞過來證書驗證服務端(Server)的身份,如果身份未驗證通過則結束本次通訊。證書驗證通過後利用服務端(Server)的公共金鑰嘗試解開被其用私有金鑰加密過的SERVER-HELLO資訊,如果解開失敗,說明該SERVER-HELLO必然是假的,故結束本次通訊。
5、客戶端傳送公共金鑰加密過的隨機資料
客戶端端(Client)生成隨機資料(sharedsecret),並且把這個隨機資料用服務端(Server)傳送過來的的公共金鑰加密,此次加密過程產生本次握手中的
6、服務端用私有金鑰解密加密後的隨機資料並協商暗號
Server驗證完client的身份之後,然後用自己的私有金鑰解密得到premastersecret然後雙方利用這個premastersecret來共同協商,得到mastersecret(可理解為premastersecret為雙方協商的暗號,然後使用這個暗號再協商一個mastersecret用來產生真正的會話金鑰用來傳輸資料)以此來保證資料的決對安全。
7、服務端跟客戶端利用暗號生成加密演算法跟金鑰key
雙方用mastersecret一起產生真正的sessionkey,這將是一個對稱加密的key。這個key還可以用來驗證資料完整性。雙方再交換結束資訊。握手結束。
接下來雙方就可以用協商好的演算法和金鑰key,採用對稱加密演算法來通訊了。