1、Fiddler抓取HTTPS過程
- 第一步:Fiddler截獲客戶端傳送給伺服器的HTTPS請求,Fiddler偽裝成客戶端向伺服器傳送請求進行握手 。
- 第二步:伺服器發回相應,Fiddler獲取到伺服器的CA證書, 用根證書(這裡的根證書是CA認證中心給自己頒發的證書)公鑰進行解密, 驗證伺服器資料簽名, 獲取到伺服器CA證書公鑰。
然後Fiddler偽造自己的CA證書(這裡的CA證書,也是根證書,只不過是Fiddler偽造的根證書), 冒充伺服器證書傳遞給客戶端瀏覽器。(也就伺服器發給客戶端的證書被Fiddler留下了,偽造了一個證書發給客戶端) - 第三步:與普通過程中客戶端的操作相同,客戶端根據返回的資料進行證書校驗、生成密碼
Pre_master
、用Fiddler偽造的證書公鑰加密,並生成HTTPS通訊用的對稱金鑰enc_key
。 - 第四步:客戶端將重要資訊傳遞給伺服器,又被Fiddler截獲。
Fiddler將截獲的密文用自己偽造證書的私鑰解開,獲得並計算得到HTTPS通訊用的對稱金鑰enc_key
。
Fiddler將對稱金鑰用伺服器證書公鑰加密傳遞給伺服器。 - 第五步:與普通過程中伺服器端的操作相同,伺服器用私鑰解開後建立信任,然後再傳送加密的握手訊息給客戶端。
- 第六步:Fiddler截獲伺服器傳送的密文,用對稱金鑰解開,再用自己偽造證書的私鑰加密傳給客戶端。
- 第七步:客戶端拿到加密資訊後,用公鑰解開,驗證HASH。握手過程正式完成,客戶端與伺服器端就這樣建立了”信任“。
2、擴充:SSL/TLS證書握手原理
普及下SSL/TLS證書握手原理,SSL/TLS證書分為單向認證和雙向認證,通過下面的兩張圖可以簡單的瞭解一下原理。
單向認證:
雙向認證:
3、Fiddler抓取HTTPS原理總結
Fiddler在之後的正常加密通訊過程中,如何在伺服器與客戶端之間充當第三者呢?
伺服器—>客戶端:Fiddler接收到伺服器傳送的密文,用對稱金鑰解開,獲得伺服器傳送的明文。再次加密,傳送給客戶端。
客戶端—>服務端:客戶端用對稱金鑰加密,被Fiddler截獲後,解密獲得明文。再次加密,傳送給伺服器端。由於Fiddler一直擁有通訊用對稱金鑰enc_key
, 所以在整個HTTPS通訊過程中,資訊對其透明。
4、Fiddler抓取HTTPS設定
因為Fiddler是一個HTTP代理服務,它位於客戶端和伺服器端之間,而安裝好Fiddler的只可以對HTTP協議進行抓包。
如果需要對HTTPS的協議進行抓包分析,就需要對Fiddler工具進行配置,使得Fiddler工具也可以抓到HTTPS協議的包。
如果沒有進行任何的配置就想用Fiddler來抓包分析是實現不了的,即使抓出來也是看不懂的加密內容。因為沒有受信任的Fiddler根證書,不能讓客戶端相信Fiddler偽造的CA證書,從而得到Pre_master
。
步驟1:配置證書
Tools選單 —> Options... —> HTTPS —> 勾選Decrypt HTTPS traffic
如下圖:
說明:
勾選Decrypt HTTPS traffic
選項:意思是解密HTTPS流量(請求)。
然後會彈出一個對話方塊,如下圖:
意思是:為了能夠攔截HITTPS通訊,Fiddler生成了唯一的根證書。您可以將Windows配置為信任此根證書,以禁止顯示安全警告。單擊“是”以重新配置Windows的受信任CA列表。
然後接著彈出對話方塊如下:點選是,確認安裝此證書。
是否確認將證書新增到計算機根目錄列表?點選是。
最後提示:成功將Fiddler的根證書新增到計算機根列表中。
步驟2:勾選設定
當勾選Decrypt HTTPS traffic
選項的時候,會提示你安裝證書,安裝好證書之後,HTTPS選項介面如下:
我們在繼續勾選Ignore server certificate errors (unsafe)
選項:忽略伺服器證書錯誤(不安全)。
之後點選OK就可以抓取HTTPS的請求了(我試過了不需要重啟)。
5、檢視證書是否安裝成功
方式一:
點選Tools選單 —> Options...
—> HTTPS
—> Actions
選擇第三項:Open Windows Certificate Manager
開啟Windows證書管理器。
開啟Windows證書管理器,選擇操作—>檢視證書,在搜尋框中輸入Fiddler
來檢視證書。
檢視結果:
然後可以選擇一個證書,進行開啟、刪除、匯出等操作。
方式二:
WIN+R開啟電腦命令提示符,輸入certmgr.msc
並回車,開啟Windows證書管理器。
然後選擇操作 —> 檢視證書,之後的步驟同上。
6、HTTPS選項介面說明
HTTPS選項介面如下:
詳細說明:
Fiddler can decrypt HITTPS sessions by re-signing traffic using self-generated certificates.
Fiddler可以使用自行生成的證書對流量進行重新簽名,從而對HITTPS會話進行解密。Capture HTTPS CONNECTs
:建立HTTPS連線通訊。
這個就是我們之前常看到有tunnel to...443
請求的原因,他是HTTPS建立通訊時候所發出的請求。
我們使用Rules選單 —>Hide CONNECTs
操作,把這些請求隱藏了。Decrypt HTTPS traffic
:解密HTTPS請求。- 下拉選單
from all processes
: 抓取所有的HTTPS程式, 包括本機和手機 。
from browsers only
: 只抓取瀏覽器中的HTTPS請求。
from non-browsers only
: 只抓取除了瀏覽器之外的所有HTTPS請求。
from remote clients only
: 抓取遠端的客戶端的HTTPS,可以代表手機。 Ignore server certificate errors (unsafe)
:忽略伺服器證書錯誤(不安全)
一般勾選上。check for certificate reyocation
:檢查證書吊銷。Certificates generated by CertEnroll engine
:由CertEnroll引擎生成的證書。Skip decryption for the following hosts
:跳過以下主機的解密。Actions
:Trust Root Certificate
:信任根證書。Export Root Certificate to Desktop
:將根證書匯出到桌面。Open Windows Certificate Manager
:開啟Windows證書管理器。Learn More about HTTPS Decryption
:瞭解有關HTTPS解密的更多資訊。Remove Interception Certificates
:刪除攔截證書。Reset All Certificates
:重置所有證書。
7、無法抓取HTTPS請求
我們在完成上面Fiddler配置後,還是無法抓取HTTPS請求。
我們可以點選Tools選單 —> Options...
—> HTTPS
—> Actions
。
選擇最後一個選項Reset All Certificates
:重置所有證書。
提示:Fiddler將刪除所有攔截證書,並重新建立新的根證書以用於解密流量。
選擇確定。
確定是否刪除證書:選擇是。
提示:Fiddler生成的證書已從“當前使用者”儲存中刪除。
點選確定。之後Fiddler會自動彈出證書的安裝,同上面第4點的步驟一。
如果還不行,可以再點選第一個選項Trust Root Certificate
:信任根證書。
之後會安裝一些Fiddler的相關證書,這樣基本上可以解決Fiddler無法抓取HTTPS請求的情況。
8、Firefox瀏覽器中捕獲HTTPS請求
Google瀏覽器和IE瀏覽器預設使用的網路代理是系統代理,當Fiddler開啟後,會自動替換掉系統代理,這樣Google瀏覽器和IE瀏覽器自動就可以抓取到HTTPS的請求。
Firefox瀏覽器與其它瀏覽器有所不同,它預設不使用系統代理,該瀏覽器需要自己設定代理和安裝證書,Fiddler才可以抓到HTTPS。
(1)檢視Firefox瀏覽器的網路代理
選擇Firefox右上角三條橫線 —> 選項 —> 網路設定(版本不同位置不同,有的在高階裡,有的在常規裡)
點選“設定”,出現如下介面:
提示:新版本預設選擇使用系統代理設定,舊版本自己檢視一下,不是的話修改一下。
這樣的話,我們就可以進行HTTP請求的抓取了。(注意不是HTTPS請求)
我們也可以進行手動代理配置,要配置成Fiddler一樣的地址和埠(請看Fiddler中Connections選項中的配置)
(2)配置Firefox瀏覽器的Fiddler證書
我們可以先通過Fiddler配置好抓取Google瀏覽器HTTPS請求,這樣的話Fiddler證書已經安裝在本機電腦中了。
新版本的Firefox瀏覽器,當我們開啟瀏覽器的時候,Firefox會自動彈出頁面,需要確認Fiddler證書。
我們點選高階,選擇信任該證書即可。
現在我們就可以使用Fiddler抓取Firefox瀏覽器的HTTPS請求了。
補充:如果是舊版本的Firefox瀏覽器。
步驟1:我們需要點選Tools選單 —> Options...
—> HTTPS
—> Actions
。
步驟2:選擇第二項Export Root Certificate to Desktop
:將根證書匯出到桌面。
步驟3:然後選擇Firefox右上角三條橫線 —> 選項 —> 證書(版本不同位置不同,有的在高階裡,有的在隱私與安全裡)
步驟4:點選“檢視證書”,點選匯入證書,如下圖:
步驟5:選擇並開啟檔案後,會彈出個框,勾選三個選項,點選確定,完成配置。
步驟6:可以抓取Firefox瀏覽器發出的HTTPS請求了。如果不行重啟Firefox瀏覽器和Fiddler試試。
9、總結:
無論什麼瀏覽器,需要抓取HTTPS請求,都需要確保:
- 確保瀏覽器使用網路是系統代理(主要就是把系統代理替換成Fiddler代理)。
- 確保正確安裝好Fiddler證書。
這樣Fiddler就可以抓取到任何瀏覽器傳送的HTTPS請求了。