https通訊流程


 

1.客戶端發送Client Hello報文開始SSL通訊。報文包含客戶端支持的SSL的指定版本,加密組件(Cipher Suite)列表(所使用的加密算法及密鑰長度)。

2.服務器可以進行SSL通訊時,會以Server Hello報文作為應答。和客戶端一樣,在報文中包含SSL版本以及加密組件。服務器端加密組件內容是從步驟1接收到客戶端加密組件內篩選出來的。

3.之后服務器發送Certificate報文。報文中包含公開密鑰證書。

4.最后服務器發送Server Hello Done報文通知客戶端,最初階段的SSL握手協商部分結束

--4a.在客戶端的證書驗證過程為:用數字證書認證機構的公鑰(一般在瀏覽器內置了)對簽名進行解密得到摘要1,使用認證機構同樣的摘要算法對證書源文件計算得到摘要2,比對摘要1和摘要2是否一致即可確認信息是否被篡改。客戶端確認證書有效后就可以從服務器證書取出公開密鑰使用了。

--4b.客戶端隨機生成Pre-master Secret(主要是通過RSA或者Diffie-Hellman算法生成)放入Client Key Exchange報文中。

--4c.使用證書攜帶的公開密鑰對Client Key Exchange報文加密處理。

--4d.用Pre-master secret生成 master secre;還有生成CBC模式的初始向量(CBC模式第一次明文塊做XOR的時候需要用到的初始向量,只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前應用最廣泛的模式。CBC加密后的密文是上下文相關的,但如果一個分組丟失,后面的分組將全部作廢,即同步錯誤)。

 

 

5.SSL第一次握手結束並驗證通過后,客戶端以Client Key Exchange報文作為回應。報文中包含通信加密中使用的一種稱為Pre-master secret的隨機密碼串。該報文已經用步驟3中的公開密鑰進行加密。

--5a.服務器使用Pre-master secret 生成master secret。還有生成CBC模式的初始向量。

Client Hello 和Server Hello階段都會發送各自的Random隨機數給對方,最終都是用來計算Master Secret的。

 

6.接着客戶端繼續發送Change Cipher Spec報文。該報文會提示服務器,在此報文之后的通信會采用Pre-master secret密鑰加密

7.客戶端發送Finished報文。該報文包含連接至今全部報文的整體校驗值。這次握手協商是否成功,要以服務器是否能夠正確解密該報文作為判定標准。(已采用Pre-master secret密鑰加密

8.服務器同樣發送Change Cipher Spec報文。

9.服務器同樣發送Finished報文。

10.服務器和客戶端的Finished報文交換完畢之后,SSL連接建立完成,通信會受到SSL的保護。從此處開始進行應用層協議的通信,即發送HTTP請求

11.應用層協議通信,即發送HTTP響應

12.最后由客戶端斷開連接。斷開連接時,發送close notify報文。上圖做了一些省略,這步之后再發送TCP FIN報文來關閉與TCP的通訊。

在以上流程中,應用層發送數據室會附加一種叫MAC的報文摘要。其能夠查知報文是否遭到篡改,從而保護報文的完整性

 

 參考:

數字證書和CA的掃盲

http://kb.cnblogs.com/page/194742/

HTTPS是如何保證安全的

http://www.jianshu.com/p/b894a7e1c779

SSL/TLS原理詳解

https://segmentfault.com/a/1190000002554673

Https SSL/TLS Pre-master Secret到 Master Secret的計算

http://www.linuxidc.com/Linux/2015-07/120230.htm

數字證書的基礎知識(證書的驗證過程好像描述得不對)

http://www.enkichen.com/2016/02/26/digital-certificate-based/ 

還有openssl源碼里的doc/HOWTO

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM