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請求了。