終結(jié)版:使用Charles進(jìn)行HTTPS抓包(包括安裝信任證書以及抓包 出現(xiàn)無法抓包unknown和證書無效解決方案)

背景:

在進(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及以上需要);


OK了



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容