訪問網站,http、https協議抓包,完整分析

HTTP、HTTPS協議

一、www.qq.com抓包

第一步:瀏覽器分析超鏈接中的URL www.qq.com

第二步:DNS請求

PC用本地IP地址向DNS服務器222.172.200.68發出DNS QUERY請求,請求www.qq.com的A記錄

本地IP地:ipconfig查看

img

DNS請求報文:

img

請求報文中,請求www.qq.com的A記錄

第步:DNS

DNS應答報文

img

DNS服務器222.172.200.68回覆DNS response,解析出www.qq.com域名對應的兩條A記錄14.18.175.154, 113.96.232.215

第四步:PC向www.qq.com的服務器14.18.175.154發起三次握手請求;

img

第五步:PC向www.qq.com發起GET請求,請求主頁

img

第六步:www.qq.com迴應HTTP/1.1 200OK,返回請求數據

img

第七步:完成數據交互過程,四次揮手斷開連接

二、https://www.sangfor.com.cn抓包

第一步:瀏覽器分析超鏈接中的URLhttps://www.sangfor.com.cn

由於我用Windows抓包,包很多,顯示的比較複雜,中間還會出現很多你不想看到的東西。我就使用了linux裏面抓包

第二步:DNS請求

DNS請求報文

img

第三步:DNS回覆

DNS應答報文

img

第四步:三次握手

第一次握手:PC發送SYN給服務器

img

第二次握手:服務器發送SYN+ACK給PC

img

第三次握手:PC發送ACK給服務器

img

第五步:SSL協商

img

1. Client Hello

握手第一步是客戶端向服務端發送 Client Hello 消息,這個消息裏包含了一個客戶端生成的隨機數 Random1、客戶端支持的加密套件(Support Ciphers)和 SSL Version 等信息。通過 Wireshark 抓包,我們可以看到如下信息:

img

2. Server Hello

第二步是服務端向客戶端發送 Server Hello 消息,這個消息會從 Client Hello 傳過來的 Support Ciphers 裏確定一份加密套件,這個套件決定了後續加密和生成摘要時具體使用哪些算法,另外還會生成一份隨機數 Random2。注意,至此客戶端和服務端都擁有了兩個隨機數(Random1+ Random2),這兩個隨機數會在後續生成對稱祕鑰時用到。

img

3. Certificate

這一步是服務端將自己的證書下發給客戶端,讓客戶端驗證自己的身份,客戶端驗證通過後取出證書中的公鑰。

img

Server Key Exchange

如果是DH算法,這裏發送服務器使用的DH參數。RSA算法不需要這一步。

Certificate Request

Certificate Request 是服務端要求客戶端上報證書,這一步是可選的,對於安全性要求高的場景會用到。

Server Hello Done

Server Hello Done 通知客戶端 Server Hello 過程結束。

img

4. Certificate Verify

客戶端收到服務端傳來的證書後,先從 CA 驗證該證書的合法性,驗證通過後取出證書中的服務端公鑰,再生成一個隨機數 Random3,再用服務端公鑰非對稱加密 Random3 生成 PreMaster Key。

img

Client Key Exchange

上面客戶端根據服務器傳來的公鑰生成了 PreMaster Key,Client Key Exchange 就是將這個 key 傳給服務端,服務端再用自己的私鑰解出這個 PreMaster Key 得到客戶端生成的 Random3。至此,客戶端和服務端都擁有 Random1 + Random2 + Random3,兩邊再根據同樣的算法就可以生成一份祕鑰,握手結束後的應用層數據都是使用這個祕鑰進行對稱加密。

爲什麼要使用三個隨機數呢?這是因爲 SSL/TLS 握手過程的數據都是明文傳輸的,並且多個隨機數種子來生成祕鑰不容易被暴力破解出來。客戶端將 PreMaster Key 傳給服務端的過程如下圖所示:

Change Cipher Spec(Client)

這一步是客戶端通知服務端後面再發送的消息都會使用前面協商出來的祕鑰加密了,是一條事件消息。

Encrypted Handshake Message(Client)

這一步對應的是 Client Finish 消息,客戶端將前面的握手消息生成摘要再用協商好的祕鑰加密,這是客戶端發出的第一條加密消息。服務端接收後會用祕鑰解密,能解出來說明前面協商出來的祕鑰是一致的。

第六步:數據傳輸

img

第七步:四次揮手

img

HTTP請求和迴應

img

https請求迴應

img

img

三、RST報文

img

四、http常見字段及狀態碼

方法字段可以取值 GET、POST、HEAD、PUT 和 DELETE。

方法(操作) 含義
GET 請求讀取一個Web頁面
HEAD 請求讀取一個Web頁面的首部
POST 附加一個命名資源(如Web頁面)
PUT 請求存儲一個Web頁面
DELETE 刪除Web頁面
TRACE 用於測試,要求服務器送回收到的請求
CONNECT 用於代理服務器
OPTION 查詢特定選項
狀態碼 說明
200 響應成功
302 跳轉,跳轉地址通過響應頭中的 Location 屬性指定
400 客戶端請求有語法錯誤,不能被服務器識別
403 服務器接收到請求,但是拒絕提供服務(例如認證失敗)
404 請求資源不存在
500 服務器內部錯誤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章