如何使用Charles抓取HTTPS
前言:
app測試,有時需要了解客戶端和服務(wù)器之間的http或https的通信,這個時候就需要一些工具的輔助了,業(yè)界比較通用的,window系統(tǒng)下有Fidder和Charles;Fidder并不支持mac系統(tǒng),所以mac系統(tǒng)直接用Charles。
在使用Charles的時候,會遇到一個抓取不到https數(shù)據(jù)的情況,相信很多人都遇到過這個問題,然后上網(wǎng)查詢了一些配置,知道了如何配置,但是實(shí)際上為什么這么配置,也許還不太清楚,這也是我為什么寫這篇文章的原因,也解決剛?cè)肼毜臅r候新人日報中遺留的問題。
一.Charles簡介
1.官網(wǎng)的解釋:Charles是一個可以讓開發(fā)者查看所用的機(jī)器(手機(jī)/web瀏覽器)和互聯(lián)網(wǎng)之間所有http和ssl/https的通信,包含請求,響應(yīng),和(包括了cookies和緩存信息)的http headers的web代理調(diào)試工具。
2.最主要的功能
1)截取http和https請求和響應(yīng)
2)斷點(diǎn):攔截請求和響應(yīng),進(jìn)行修改或者拒絕,使服務(wù)端或客戶端拿到編輯過的請求或響應(yīng)
3)支持模擬網(wǎng)絡(luò)帶寬和進(jìn)行網(wǎng)絡(luò)延遲
二.使用到這個工具,那么肯定需要進(jìn)行安裝,以下是安裝步驟:
1.下載安裝
官網(wǎng)地址:http://www.charlesproxy.com是一個dmg后綴的文件,安裝方式跟其他軟件一樣,拖到application文件。
下面是從官網(wǎng)截過來的圖(最新版本看官網(wǎng)公布),也會提示需要的java版本

2.這里主要是介紹app,所以就著重講解關(guān)于手機(jī)設(shè)備的配置,瀏覽器的以后有機(jī)會再增加。
1)Charles的配置:這是要打開代理功能,如以下步驟,在Proxy Settings中填好端口(8888),并且勾選上“Enable transparent HTTP proxying”

2)獲取運(yùn)行Charles的電腦的IP地址,可以在命令行中運(yùn)行ifconfig en0或者直接查看網(wǎng)絡(luò)配置

3)配置手機(jī)設(shè)備網(wǎng)絡(luò),需要Charles和設(shè)備都處于一個Wi-Fi環(huán)境,設(shè)置好代理

4)啟動手機(jī)設(shè)備中想要進(jìn)行抓取請求的app,這時在Charles中彈出手機(jī)設(shè)備的請求連接確認(rèn),點(diǎn)擊“allow”即可。當(dāng)然不小心點(diǎn)擊到”Deny“也沒關(guān)系,重啟Charles之后,會再次彈出此確認(rèn)請求。
連接了代理,上網(wǎng)也許會遇到一些彈窗提示說無法驗(yàn)證服務(wù)器,是否要繼續(xù),這里點(diǎn)擊繼續(xù)就能正常訪問了(如圖),如果點(diǎn)擊取消,那么就會停止請求,也就不會有數(shù)據(jù)展示了。


3.以上部分只能截取到http協(xié)議的數(shù)據(jù),如果需要截取https協(xié)議的數(shù)據(jù),則還需要進(jìn)行另外的配置,如無,會出現(xiàn)亂碼的情況,后面會解釋為什么需要這樣子配置。
1)手機(jī)設(shè)備中安裝Charles的CA證書,在設(shè)置好Charles代理之后,在手機(jī)瀏覽器中訪問http://charlesproxy.com/getssl,安裝好證書。
2)Charles設(shè)置:在SSL
Proxying Settings中勾選上Enable SSL Proxying,并且加上訪問app的域名和端口。

4.為什么需要安裝Charles的CA證書呢?
1)先理清一些概念的東西:
a)簡單來說,https是http的安全版本,超文本傳輸協(xié)議http是以明文發(fā)送數(shù)據(jù),而https是具有安全性的ssl加密傳輸協(xié)議,可以這么認(rèn)為https=http+ssl。
b)采用https的服務(wù)器必須從CA申請一個用于證明服務(wù)器用途類型的證書,證書是唯一性,只用于對應(yīng)的服務(wù)器。客戶端要認(rèn)可這個服務(wù)器是否是安全的,可以進(jìn)行訪問或者交易等操作,則需要進(jìn)行對服務(wù)端的驗(yàn)證。
下圖是客戶端對服務(wù)器的驗(yàn)證過程:

c)ssl證書,遵循了ssl協(xié)議,在客戶端和服務(wù)器之間建立了一條ssl安全通道,一般ssl證書都是在驗(yàn)證服務(wù)器身份后頒發(fā)給客戶端。
d)由于ssl技術(shù)已建立在所有主要的瀏覽器和web服務(wù)器程序中,因此,僅需安裝服務(wù)器證書就可以激活ssl協(xié)議,所以客戶端通過信任該證書,就相當(dāng)于信任了該主機(jī)(服務(wù)器)。
下圖是客戶端和服務(wù)端加密通訊的流程:

2)通過以上一個簡單的理順之后,這也就為什么當(dāng)我們在使用Charles進(jìn)行抓包的時候需要安裝證書,可以通過ssl數(shù)字證書中的私用密鑰來解譯加密的信息,展示在Charles中,但是Charles有一個特殊的地方,就是實(shí)際上客戶端安裝的是Charles的CA證書,然后Charles安裝服務(wù)器的CA證書,實(shí)際上流程還是一樣的。

三.Charles曾經(jīng)遇到的問題
1.iPhone機(jī)型安裝好證書之后,抓包還是遇到了有問題,header中failure字段提示:No request was made. Possibly the SSL certificate was rejected. Note字段提示:You mayneed to configure your browser or application to trust the Charles RootCertificate. See SSL Proxying in the Help menu.
答案:在通用-關(guān)于手機(jī)-證書信任設(shè)置中把證書信任即可,有些手機(jī)則是進(jìn)入通用-描述文件與設(shè)備管理中把證書信任
2.有遇到過手機(jī)開啟代理,然后手機(jī)都沒有網(wǎng)絡(luò),這時可能需要重裝證書。
四.資料來源:
1.參考https百度百科
2.參考ssl百度百科
3.參考Charles官網(wǎng)信息
4.以及其他博客