背景
抓包分析
- 選擇使用的網卡,設置捕捉過濾器host blog.csdn.net (也可以不設置,抓包後通過顯示過濾器查看),開始抓取。
2. 使用curl https://blog.csdn.net/u010648018/article/details/103447167發起一次https請求
3. 可以看到,首先是tcp的三次握手,然後是tls協商加密算法與密鑰交換過程
4. Client Hello,客戶端向服務端發送一個隨機數和支持的加密算法
5. Server Hello,服務端向客戶端發送隨機數和選擇的加密算法(ECDHE)
- Certificate, Server Key Exchange, Server Hello Done
- Certificate 服務端向客戶端發送證書鏈。證書用於身份認證,其中包含服務端公鑰PubKey
- Server Key Exchange 根據上面具體選擇的加密算法(ECDHE)準備生成密鑰需要的一些參數(premaster)。(RSA算法沒有該步驟)
- Server Hello Done 表明服務端的Hello消息發送完畢
- Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
- Client Key Exchange 在驗證服務端發送證書可信後,生成加密算法所需的一些參數
- Change Cipher Spec 告訴服務端以後要使用選擇的加密算法加密數據
- Encrypted Handshake Message 根據之前客戶端和服務端生成的隨機數、加密算法所需的一些參數生成會話密鑰key,對之前的握手消息的Hash值和Mac值進行加密,來驗證該加密密鑰是否可用。服務端以相同的方法生成會話密鑰解密該消息,校驗其中的Hash值和Mac值。
- Change Cipher Spec, Encrypted Handshake Message
- Change Cipher Spec 告訴客戶端以後要使用該加密算法來加密數據
- Encrypted Handshake Message 使用會話密鑰key加密之前的握手消息的Hash值和Mac值,發送給客戶端校驗
9. 雙方校驗完成,發送加密的應用數據
整體流程
閱讀更多 爪哇生活 的文章