背景:
在進行App測試或定位線上問題時,經常會遇到抓取HTTPS數據包的需求。一般在windows上會使用fiddler,Mac上使用Charles。對于https請求,抓到的數據因為經過了加密,只能看到亂碼。
本文介紹如何使用Charles來抓取https網絡報文。操作步驟已在MAC + iphone5s上親測。
操作原理
關鍵的操作思想:
1. 構造一個中間人代理,它有能力完成TLS/SSL握手
2. 弄到一個根證書,并用它生成簽名認證的代理服務器證書
Charles就是一個理想的中間人,它支持SSL握手,可以自動根據根證書生成一個簽名的服務器證書,并且它的官網為我們提供了一個根證書。
我們要做的就是在客戶端安裝好這個根證書,然后讓我們的操作系統信任它。對App來說,需要設法在IOS或Android上裝上這個官網提供的根證書。
完成上述步驟后,App再指定Charles為它的代理服務器,這時,App請求的服務器證書就是Charles自動生成的代理服務器證書。如果Charles的根證書已被信任,這個自動生成的代理服務器證書是有效的,使用它App和Charles的TLS握手可以順利完成。
以下是詳細的操作步驟:
分步指南
第一步:配置HTTP代理,這步與抓取HTTP請求是一樣的:
圖1
選擇在8888端口上監聽,然后確定。夠選了SOCKS proxy,還能截獲到瀏覽器的http訪問請求。
圖2
點add添加需要監視的域名,支持 *號通配符,端口一般都是443:
第二步:配置SSL代理:
首先在charles的 Proxy選項選擇SSL Proxy Settings
第三步? 為手機設置代理
在手機無線中配置手動代理,輸入安裝Charles的電腦的網絡地址,端口填8888。
第四步 安裝根證書
在手機上安裝Charles的根證書:
以IOS為例,在Safri上打開Charles的根證書下載網址: chls.pro/ssl 。
順利的話會出現這樣的畫面,繼續點安裝,一路點確定。然后去設置里的描述文件管理如果看到有綠色的勾勾就說明安裝成功了。
接下來,在設置->通用->關于本機->證書信任設置 剛剛安裝的證書的開關打開信任就可以抓加密包了。
圖4
如果不能下載,檢查手機是否正確設置了代理,Charles是否已經打開并配置正確。
電腦端的根證書安裝
以MAC為例,直接在Charles的Help菜單中安裝;安裝完成后去系統的鑰匙串訪問中信任它。
圖5
完成后:試試看抓一下數據,可以看到抓取到的報文如下:
圖6
以上的步驟在隨便一搜都可以找到的,但是,上面是針對ios和一部分android機子可行,android7.0的機子再去用charles抓包時候會出現一下情況:?
看到這里,其實就只要一步,步驟:設置-->通用-->關于本機-->證書信任設置(iOS10及以上需要);