背景:
在進(jìn)行App測試或定位線上問題時(shí)休雌,經(jīng)常會遇到抓取HTTPS數(shù)據(jù)包的需求。一般在windows上會使用fiddler义郑,Mac上使用Charles蝶柿。對于https請求,抓到的數(shù)據(jù)因?yàn)榻?jīng)過了加密非驮,只能看到亂碼交汤。
本文介紹如何使用Charles來抓取https網(wǎng)絡(luò)報(bào)文。操作步驟已在MAC + iphone5s上親測劫笙。
操作原理
關(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)信任它寥掐。對App來說,需要設(shè)法在IOS或Android上裝上這個(gè)官網(wǎng)提供的根證書磷蜀。
完成上述步驟后召耘,App再指定Charles為它的代理服務(wù)器,這時(shí)褐隆,App請求的服務(wù)器證書就是Charles自動(dòng)生成的代理服務(wù)器證書污它。如果Charles的根證書已被信任,這個(gè)自動(dòng)生成的代理服務(wù)器證書是有效的庶弃,使用它App和Charles的TLS握手可以順利完成衫贬。
以下是詳細(xì)的操作步驟:
分步指南
第一步:配置HTTP代理,這步與抓取HTTP請求是一樣的:
圖1
選擇在8888端口上監(jiān)聽虫埂,然后確定祥山。夠選了SOCKS proxy,還能截獲到瀏覽器的http訪問請求掉伏。
圖2
點(diǎn)add添加需要監(jiān)視的域名缝呕,支持 *號通配符,端口一般都是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 栈暇。
順利的話會出現(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
以上的步驟在隨便一搜都可以找到的侥钳,但是适袜,上面是針對ios和一部分android機(jī)子可行,android7.0的機(jī)子再去用charles抓包時(shí)候會出現(xiàn)一下情況:?
看到這里慕趴,其實(shí)就只要一步痪蝇,步驟:設(shè)置-->通用-->關(guān)于本機(jī)-->證書信任設(shè)置(iOS10及以上需要)鄙陡;