標籤:
轉自:http://yoursunny.com/t/2011/FiddlerHTTPS/在伺服器上用Fiddler抓取HTTPS流量
陽光男孩 發表於2011-03-19
開發互連網應用的過程中,常常會設立或利用網路介面。為了調試對網路介面的使用,往往需要查看流入和流出網路介面的網路流量或資料包。“抓包工具”就是一類用於記錄通過網路介面的資料的工具。
我們知道,網路通訊協定是分層設計的,OSI模型將網路通訊協定分為了7個層次。不同的抓包工具,可以在網路通訊協定的不同層次上工作。常用的Wireshark就是一種在網路層上工作的抓包工具,不僅內建大量的協議分析器,而且可以通過編寫Wireshark外掛程式來識別自訂的協議。雖然Wireshark功能強大,但是卻並不能解決所有的抓包問題,其原因在於:
- Wireshark工作在網路層;如果電腦配置了IPSec傳輸層加密,則在網路層的流量都已經被加密,什麼也看不到。
- 當今大量網路介面使用HTTPS加密,Wireshark不能抓取到HTTPS流量的明文內容。
那麼,如何抓取到HTTPS請求的明文內容呢?使用Fiddler就可以辦到。
Fiddler是Eric Lawrence編寫的HTTP抓包軟體。Fiddler工作在應用程式層上,作為其他程式的HTTPProxy 伺服器。它可以直接抓取並分析HTTP流量,也可以作為“中間人”抓取並分析HTTPS流量。
Fiddler抓取HTTPS流量的原理
TLS是一種端到端的傳輸層加密協議,是HTTPS協議的一個組成部分。訪問HTTPS網站時,HTTP請求、響應都通過TLS協議在瀏覽器和服務 器之間加密傳輸,並且通過數位憑證技術保證資料的保密性和完整性;任何“中間人”、包括Proxy 伺服器都只能轉寄資料,而無法竊聽或者篡改資料。
要抓取HTTPS流量的明文內容,Fiddler必須解密HTTPS流量。但是,瀏覽器將會檢查數位憑證,並發現會話遭到竊聽。為了騙過瀏覽 器,Fiddler通過使用另一個數位憑證重新加密HTTPS流量。Fiddler被配置為解密HTTPS流量後,會自動產生一個名為 DO_NOT_TRUST_FiddlerRoot的CA認證,並使用該CA頒發每個網域名稱的TLS認證。若 DO_NOT_TRUST_FiddlerRoot認證被列入瀏覽器或其他軟體的信任CA名單內,則瀏覽器或其他軟體就會認為HTTPS會話是可信任的、 而不會再彈出“認證錯誤”警告。
開啟HTTPS流量解密功能後,Fiddler將會提示使用者將DO_NOT_TRUST_FiddlerRoot認證列入IE瀏覽器的信任CA名 單。用於調試用戶端時,這已經足夠了;Firefox使用者也可以很方便的手動匯入DO_NOT_TRUST_FiddlerRoot認證。但是,若要在服 務器上抓取ASP.Net發出的HTTPS請求,這是不夠的——你必須將DO_NOT_TRUST_FiddlerRoot認證匯入“機器帳號”的信任 CA名單。
操作錄影
該錄影示範了下列操作:
- 開啟Fiddler的HTTPS流量解密功能
- 將DO_NOT_TRUST_FiddlerRoot認證匯入“機器帳號”的信任CA名單
- 將PHP指令碼的Proxy 伺服器設定為127.0.0.1:8888,並抓取HTTPS請求
主要網路開發架構的抓包配置
Fiddler的工作方式是Proxy 伺服器(連接埠號碼8888)。只要開發架構支援設定HTTPProxy 伺服器,都可以使用Fiddler。
#PHP curl$ch=curl_init(‘https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js‘);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_PROXY,‘127.0.0.1:8888‘);//設定Proxy 伺服器curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);//若PHP編譯時間不帶openssl則需要此行$resp=curl_exec($ch);curl_close($ch);
<!-- ASP.Net web.config --><configuration> <system.net> <defaultProxy enabled="false"> <proxy proxyaddress="http://127.0.0.1:8888/"/> </defaultProxy> </system.net></configuration>
如果你使用linux伺服器,請將Fiddler安裝在一台Windows電腦上並在Tools - Fiddler Options - Connections勾選Allow remote computers to connect,並手動將FiddlerRoot.cer匯入linux伺服器的信任CA名單,最後將Proxy 伺服器設定成Fiddler所在IP的8888 連接埠。
在伺服器上用Fiddler抓取HTTPS流量