使用wireshark抓包瞭解https

背景

Https即HTTP over TLS。為避免Http明文傳輸帶來的安全隱患,我們可以對傳輸的數據進行加密,考慮到性能問題,使用對稱加密算法。客戶端需要知道服務端使用的密鑰及加密算法,如何保證密鑰的安全傳輸呢?這裡可以使用非對稱加密算法,使用服務端的公鑰pubKey來加密傳輸密鑰key。公鑰是明文傳輸的,中間人仍然可以使用自己的公鑰加密key欺騙客戶端。



TLS使用證書進行身份認證,保證服務端是受信任的,同時證書中使用數字簽名防止被篡改。這樣保證了pubKey的安全傳輸TLS使用協商機制來選擇對稱加密使用的算法

抓包分析

選擇使用的網卡,設置捕捉過濾器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 DoneCertificate 服務端向客戶端發送證書鏈。證書用於身份認證,其中包含服務端公鑰PubKeyServer Key Exchange 根據上面具體選擇的加密算法(ECDHE)準備生成密鑰需要的一些參數(premaster)。(RSA算法沒有該步驟)Server Hello Done 表明服務端的Hello消息發送完畢

Client Key Exchange, Change Cipher Spec, Encrypted Handshake MessageClient Key Exchange 在驗證服務端發送證書可信後,生成加密算法所需的一些參數Change Cipher Spec 告訴服務端以後要使用選擇的加密算法加密數據Encrypted Handshake Message 根據之前客戶端和服務端生成的隨機數、加密算法所需的一些參數生成會話密鑰key,對之前的握手消息的Hash值和Mac值進行加密,來驗證該加密密鑰是否可用。服務端以相同的方法生成會話密鑰解密該消息,校驗其中的Hash值和Mac值。

Change Cipher Spec, Encrypted Handshake MessageChange Cipher Spec 告訴客戶端以後要使用該加密算法來加密數據Encrypted Handshake Message 使用會話密鑰key加密之前的握手消息的Hash值和Mac值,發送給客戶端校驗

9. 雙方校驗完成,發送加密的應用數據

整體流程