在服務器上用Fiddler抓取HTTPS流量

http://yoursunny.com/t/2011/FiddlerHTTPS/


開發互聯網應用的過程中,常常會設立或利用網絡接口。爲了調試對網絡接口的使用,往往需要查看流入和流出網絡接口的網絡流量或數據包。“抓包工具”就是一類用於記錄通過網絡接口的數據的工具。

我們知道,網絡協議是分層設計的,OSI模型將網絡協議分爲了7個層次。不同的抓包工具,可以在網絡協議的不同層次上工作。常用的Wireshark就是一種在網絡層上工作的抓包工具,不僅自帶大量的協議分析器,而且可以通過編寫Wireshark插件來識別自定義的協議。雖然Wireshark功能強大,但是卻並不能解決所有的抓包問題,其原因在於:

  • Wireshark工作在網絡層;如果計算機配置了IPSec傳輸層加密,則在網絡層的流量都已經被加密,什麼也看不到。
  • 當今大量網絡接口使用HTTPS加密,Wireshark不能抓取到HTTPS流量的明文內容。

那麼,如何抓取到HTTPS請求的明文內容呢?使用Fiddler就可以辦到。

Fiddler是Eric Lawrence編寫的HTTP抓包軟件。Fiddler工作在應用層上,作爲其他程序的HTTP代理服務器。它可以直接抓取並分析HTTP流量,也可以作爲“中間人”抓取並分析HTTPS流量。

Fiddler抓取HTTPS流量的原理

TLS是一種端到端的傳輸層加密協議,是HTTPS協議的一個組成部分。訪問HTTPS站點時,HTTP請求、響應都通過TLS協議在瀏覽器和服務器之間加密傳輸,並且通過數字證書技術保證數據的保密性和完整性;任何“中間人”、包括代理服務器都只能轉發數據,而無法竊聽或者篡改數據。

要抓取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名單。

操作錄像

該錄像演示了下列操作:

  1. 開啓Fiddler的HTTPS流量解密功能
  2. 將DO_NOT_TRUST_FiddlerRoot證書導入“機器帳號”的信任CA名單
  3. 將PHP腳本的代理服務器設置爲127.0.0.1:8888,並抓取HTTPS請求

主要網絡開發框架的抓包配置

Fiddler的工作方式是代理服務器(端口號8888)。只要開發框架支持設置HTTP代理服務器,都可以使用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');//設置代理服務器
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名單,最後將代理服務器設置成Fiddler所在IP的8888端口。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章