背景:
在進(jìn)行App測(cè)試或定位線上問題時(shí),經(jīng)常會(huì)遇到抓取HTTPS數(shù)據(jù)包的需求。一般在windows上會(huì)使用fiddler,Mac上使用Charles。對(duì)于https請(qǐng)求,抓到的數(shù)據(jù)因?yàn)榻?jīng)過了加密,只能看到亂碼。
本文介紹如何使用Charles來抓取https網(wǎng)絡(luò)報(bào)文。操作步驟已在MAC + iphone5s上親測(cè)。
操作原理
關(guān)鍵的操作思想:
1. 構(gòu)造一個(gè)中間人代理,它有能力完成TLS/SSL握手
2. 弄到一個(gè)根證書,并用它生成簽名認(rèn)證的代理服務(wù)器證書
Charles就是一個(gè)理想的中間人,它支持SSL握手,可以自動(dòng)根據(jù)根證書生成一個(gè)簽名的服務(wù)器證書,并且它的官網(wǎng)為我們提供了一個(gè)根證書。
我們要做的就是在客戶端安裝好這個(gè)根證書,然后讓我們的操作系統(tǒng)信任它。對(duì)App來說,需要設(shè)法在IOS或Android上裝上這個(gè)官網(wǎng)提供的根證書。
完成上述步驟后,App再指定Charles為它的代理服務(wù)器,這時(shí),App請(qǐng)求的服務(wù)器證書就是Charles自動(dòng)生成的代理服務(wù)器證書。如果Charles的根證書已被信任,這個(gè)自動(dòng)生成的代理服務(wù)器證書是有效的,使用它App和Charles的TLS握手可以順利完成。
以下是詳細(xì)的操作步驟:
分步指南
第一步:配置HTTP代理,這步與抓取HTTP請(qǐng)求是一樣的:

圖1
選擇在8888端口上監(jiān)聽,然后確定。夠選了SOCKS proxy,還能截獲到瀏覽器的http訪問請(qǐng)求。

圖2
點(diǎn)add添加需要監(jiān)視的域名,支持 *號(hào)通配符,端口一般都是443:

第二步:配置SSL代理:
首先在charles的 Proxy選項(xiàng)選擇SSL Proxy Settings

第三步? 為手機(jī)設(shè)置代理
在手機(jī)無線中配置手動(dòng)代理,輸入安裝Charles的電腦的網(wǎng)絡(luò)地址,端口填8888。
第四步 安裝根證書
在手機(jī)上安裝Charles的根證書:
以IOS為例,在Safri上打開Charles的根證書下載網(wǎng)址: chls.pro/ssl 。
順利的話會(huì)出現(xiàn)這樣的畫面,繼續(xù)點(diǎn)安裝,一路點(diǎn)確定。然后去設(shè)置里的描述文件管理如果看到有綠色的勾勾就說明安裝成功了。
接下來,在設(shè)置->通用->關(guān)于本機(jī)->證書信任設(shè)置 剛剛安裝的證書的開關(guān)打開信任就可以抓加密包了。

圖4
如果不能下載,檢查手機(jī)是否正確設(shè)置了代理,Charles是否已經(jīng)打開并配置正確。
電腦端的根證書安裝
以MAC為例,直接在Charles的Help菜單中安裝;安裝完成后去系統(tǒng)的鑰匙串訪問中信任它。

圖5
完成后:試試看抓一下數(shù)據(jù),可以看到抓取到的報(bào)文如下:

圖6
以上的步驟在隨便一搜都可以找到的,但是,上面是針對(duì)ios和一部分android機(jī)子可行,android7.0的機(jī)子再去用charles抓包時(shí)候會(huì)出現(xiàn)一下情況:?

看到這里,其實(shí)就只要一步,步驟:設(shè)置-->通用-->關(guān)于本機(jī)-->證書信任設(shè)置(iOS10及以上需要);

