1. 程式人生 > >單點登入(五):SSL相關知識

單點登入(五):SSL相關知識

一.SSL簡介
二.SSL握手協議

一.SSL簡介
對於SSL:(Secure Sockets Layer 安全套接層)。是為網路通訊提供安全及資料完整性的一種安全協議。普通的TCP信無法保證資料的安全,它隨時可能被第三方截獲而洩漏通訊雙方之間的隱私。尤其在跟使用者名稱,密碼,個人資訊息。所以我們常常用SSL協議來建立安全保密的通訊,SSL協議能夠保證互動雙方的資料按密文方式傳輸,第三方在沒有私鑰的情況下幾乎無法破解,從而到達保密的目的。 SSL協議可分為兩層:
SSL記錄協議:它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。說白了就是加密用的。

SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。
二.SSL握手協議
SSL握手一般來說有2個目的,第一,客戶端和伺服器端對保護資料的演算法達成一致。第二,需要確立一組由那些演算法所使用的加密金鑰。 過程:
1.由於SSL協議依賴於TCP連線實施,所以在SSL互動之前需要先建立TCP連線。客戶端connect服務端,服務端acccept客戶端,經歷三次握手以後TCP連線建立。
Ps:
TCP的三次握手協議:

位碼即tcp標誌位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)

Sequence number(順序號碼) Acknowledge number(確認號碼)

第一次握手:主機A傳送位碼為syn=1,隨機產生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包

第三次握手:主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功。

完成三次握手,主機A與主機B開始傳送資料。

2.客戶端(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,採用對稱加密演算法來通訊了。

比如說:
張三:我是張三,你是李四嗎?我想和你祕密對話,我只聽得懂英文,法文,日文和中文,順便給你一個我的幸運數字。
李四:我們用中文好了,這是我的證件和一份公開的宣告,當然還有我的幸運數字。
張三:檢查後發現,證書沒有問題,看來我聯絡的人確實是李四。張三想到了一串很奇怪,別人很難猜到的一句話,然後用李四聲明裡面的方法,進行了轉換,然後把這句話給了李四
李四:聽到了張三這句話,用自己的內部方法拿到了原始的那句話,通過這句話和雙方的2個幸運數字,轉化成了一個最終的接頭暗語。並將這個暗號發給張三
張三:也根據那句話和雙方的幸運數字,計算了同樣的最終的接頭暗語,同時和李四發過來的進行比對,確認是否相同。
張三:確認完畢,張三開始用暗號加上要說的話,和李四開始了祕密通話
李四:使用同樣的方法,開始通話