1. 程式人生 > >使用Charles抓取 Https 資料及原理分析

使用Charles抓取 Https 資料及原理分析

環境

PC :Windows 10
Mobile:華為榮耀V8 Android7.0
Charles: Charles 4.2.5

在電腦上安裝Charles根證書

Tips : 如果您不需要抓取PC上的Https請求, 可以跳過這裡。

第一步 選擇安裝根Charles根證書。
這裡寫圖片描述

第二步 彈出證書安裝嚮導
這裡寫圖片描述

第三步 根據嚮導安裝證書。

注意要將證書安裝到【受信任的根證書頒發機構】儲存區。
這裡寫圖片描述

第四步 完成安裝

安裝成功後可以在作業系統已經安裝證書列表看到Charles根證書:
這裡寫圖片描述

Tips 可以通過谷歌瀏覽器按 設定→高階→隱私設定和安全性→管理證書 的步驟檢視系統已安裝證書列表。

移動端安裝Charles根證書

Tips : 如果您不需要抓取移動端上的Https請求, 可以跳過這裡。

第一步 選擇在移動手機上安裝Charles根證書
這裡寫圖片描述

選擇 Install Charles Root Certificate on a Mobile Device or Remote Browser。
然後根據提示使用手機連線指定代理主機及埠號:
這裡寫圖片描述

第二步 下載根證書並安裝

連線成功後開啟手機瀏覽器訪問地址 chls.pro/ssl,下載根證書然後根據指引完成安裝。
安裝成功後可以在系統的安全設定頁檢視Android手機已安裝的根證書列表:
這裡寫圖片描述

Tips :
Android手機檢視證書列表的路徑一般為: 設定→高階設定→安全和隱私→安全→證書儲存→受信任的憑據
不同手機檢視路徑可能略有差異,不過一般都是位於安全選項下。

指定需要解析的Https請求

Charles只會解析指定主機名稱的Https請求。

第一步 開啟SSL代理設定
這裡寫圖片描述

第二步 新增需要解析的Https請求主機名
這裡寫圖片描述
埠號指定 443埠。也可以不用指定。本例中我們指定的主機名是:*.baidu.com , 它表示指定解析所有以.baidu.com為字尾的主機名。

至此,所有的準備工作都已完成。總結一下就兩步操作:第一步安裝根證書,第二部指定需要過濾的主機名。接下來就可以看到需要解析的Https請求明文了:
這裡寫圖片描述

原理分析

Charles利用一種叫做【中間人攻擊】的手段來解析Https請求,即向服務端假冒客戶端,向客戶端假冒服務端。客戶端與服務端所有通訊實際上是通過Charles這一代理來完成的。

我們知道,Https是具有資訊加密及身份認證功能的。Charles是如何突破層層防線從而獲得代理人這一角色的呢?實際上,當我們通過Charles代理髮起Https請求時,Charles會使用自己的根證書為請求的服務端簽發一個代理證書,這個代理證書會取代服務端原證書傳遞給客戶端。客戶端在獲取代理證書後會根據CA證書認證鏈判斷該證書是否有效?如果有效則信任該請求。那麼客戶端是如何判斷該證書是有效的呢?這就是我們執行【在電腦上安裝Charles根證書】或【移動端安裝Charles根證書】的理由了。CA證書認證鏈的終點是根證書,如果能證明該證書的頒發機構的根位於系統根證書列表內,則說明該證書就是有效的。

其實即使我們不在客戶端安裝Charles根證書,僅僅執行【指定需要解析的Https請求】這一步也是可以抓取Https資料的,但此時客戶端會發出警告資訊,選擇忽視警告繼續訪問就可以了。但這種情況也有例外,如果服務端Https使用 HSTS 規則的話,當證書不被系統信任時,連線是不會建立成功的。

參考文獻