Fiddler 抓取https請求

  引言

  在平常測試中,不論是功能測試仍是接口測試,避免不了抓包。抓包工具備不少,這裏只講fiddler的使用,而且是對https請求的抓取。android

  概況

  抓包以前,先了解一下Fiddler。瀏覽器

  Fiddler是一款免費且功能強大的數據包抓取軟件。它經過代理的方式獲取程序http通信的數據,能夠用其檢測網頁和服務器的交互狀況,可以記錄全部客戶端和服務器間的http請求,支持監視、設置斷點、甚至修改輸入輸出數據等功能。fiddler包含了一個強大的基於事件腳本的子系統,而且可以使用.net框架語言擴展。安全

  基本原理

  Fiddler是位於客戶端和服務器端之間的HTTP代理, 它可以記錄客戶端和服務器之間的全部 HTTP(S)請求,能夠針對特定的HTTP(S)請求,分析網絡傳輸的數據,還能夠設置斷點、修改請求的數據和服務器返回的數據。
Fiddler在瀏覽器與服務器之間創建一個代理服務器,Fiddler工做於七層中的應用層,可以捕獲經過的HTTP(S)請求。Fiddler啓動後會自動將代理服務器設置成本機,默認端口爲8888。Fiddler不只能記錄PC上瀏覽器的網絡請求數據,還能夠記錄同一網絡中的其餘設備的HTTP(S)請求數據。數據傳遞流程大體以下:服務器

  

 

  1) 客戶端像WEB服務器發送HTTP(S)請求時,請求會先通過代理Fiddler代理服務器。
  2) Fiddler代理服務器截取客戶端的請求報文,再轉發到WEB服務器,轉發以前能夠作一些請求報文參數修改的操做。
  3) WEB服務器處理完請求之後返回響應報文,Fiddler代理服務器會截取WEB服務器的響應報文。
  4) Fiddler處理完響應報文後再返回給客戶端。網絡

  簡單來講就是:app

  客戶端請求 -> 通過代理 -> 到達服務端
  服務端返回 -> 通過代理 -> 到達客戶端框架

  抓HTTPS的原理

  如今APP中的數據傳輸基本上都使用HTTS傳輸,傳輸的數據都是通過加密的,這增長了咱們分析數據包的難度,還好Fiddler除了能夠抓取HTTP數據包,還能夠抓取HTTPS數據包。因爲HTTPS傳輸須要使用到CA證書,因此抓取抓取HTTPS數據包時須要作一些特殊配置。Fiddler截取HTTPS報文的流程大體以下:工具

  

  1) 客戶端請求創建HTTPS連接,發送客戶端支持的加密協議及版本列表等信息給服務器端。
  2) Fiddler接受客戶端請求並假裝成客戶端向WEB服務器發送相同的請求。
  3) WEB服務器收到Fiddler的請求之後,從請求中篩選合適的加密協議。並返回服務器CA證書,證書中包括公鑰信息。
  4) Fiddler收到WEB服務器的響應後保存服務器證書並自簽名一個CA證書,假裝成服務器,把該證書下發給客戶端。
  5) 客戶端驗證證書合法性。(Fiddler可否抓取到HTTPS報文關鍵看這一步)
  6) 客戶端生產對稱密鑰,經過證書的公鑰加密發送給服務器。
  7) Fiddler攔截客戶端的請求之後,使用私鑰解密該報文,獲取對稱加密祕鑰,並使用服務器證書中帶的公鑰加密該對稱密鑰發送給WEB服務器。此時對稱密鑰已經泄露了,之後可使用該祕鑰界面客戶端和服務器端傳輸的數據。
  8) WEB服務器接收到客戶端發送的加密的對稱密鑰後使用私鑰解密,並使用對稱密鑰加密測試數據傳給客戶端。
  9) Fiddler使用前面獲取的對稱密鑰解密報文。
  10) 客戶端驗證數據無誤之後HTTPS鏈接就創建完成,客戶端開始向服務器發送使用對稱密鑰加密的業務數據
  11) Fiddler使用前面獲取的對稱密鑰解密客戶端發送的數據並從新加密轉發給客戶端。性能

  HTTPS請求兩類

  1.帶證書的https請求:請求中攜帶證書,只要證書正確就能請求過去,沒有其它要求。學習

  2.不帶證書的https請求:只要是CA頒佈的正規證書(收費的),均可以不用攜帶證書,達到https的加密效果,大大減輕了請求的代碼量,可是這種請求必需要求請求方合法(時間要正確,好比把手機時間調成幾天前,證書就會認爲請求非法,拒絕訪問)

  Fiddler抓包要求

  從上面能夠看到,fiddler至關於代理,客戶端和服務器交互都要經過fiddler,Fiddler抓取HTTPS協議成功的關鍵是根證書(根證書是CA認證中心給本身頒發的證書,是信任鏈的起始點。安裝根證書意味着對這個CA認證中心的信任。),這是一個信任鏈的起點,這也是Fiddler僞造的CA證書可以得到客戶端和服務器端信任的關鍵。

  手機或模擬器抓包https請求的話,須要在手機上安裝fiddler證書。

  安裝步驟這裏不復述了。

  問題1:須要注意的是,不是任何Https請求包均可以抓到的。

  Android7.0如下是能夠的,只要手機裏安裝對應的CA證書,好比用Charles抓包,手機只需安裝Charles提供的證書就行;Android7.0以後,Google推出更加嚴格的安全機制,應用默認不信任用戶證書(手機裏本身安裝的證書),本身的app能夠經過配置解決,可是抓其它app的Https請求就行不通。

  首先看一下安卓7.0以上的系統,抓包以下:

  

    

  

 

   若是是安裝7.0如下的版本,這裏拿安卓4.0來演示,如圖:

   

 

   

  結論是android7.0如下版本,在模擬器下抓包https是沒有問題的。固然手機一樣的版本也會支持。而高於7.0的安卓系統則抓不了https請求。

  注意這裏的https請求是沒有攜帶CA證書到請求中去的。

  問題2:若是不能,那些狀況下能夠抓取,那些狀況下抓取不到?

  雖然Android7.0以後常規手段不能抓Https的包,可是能夠經過黑科技跳過證書驗證流程,例如,經過xposed,安裝JustTrustMe模塊,Https證書驗證直接跳過。這個沒有試過,可自行測試。

   問題3:如何防止被抓包?

 

  1. Https雙向驗證,不是客戶端的請求,拒接連接(這裏服務端拒絕和客戶端創建鏈接)
  2. 判斷是不是使用WIFI代理(不可靠,能夠經過hook跳過)
  3. 數據加密傳輸(不少app都是採用加密傳輸,要注意密鑰的安全問題,防止被反編譯泄露密鑰)

 

  總結

  以上就是手機或模擬器抓取https請求包的介紹。一些簡單安裝或抓取步驟就沒在這裏一一講解。 另外對自動化測試,測試開發及性能測試相關的朋友能夠加入交流羣,學習與溝通~

相關文章
相關標籤/搜索