背景:
在進行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請求是一樣的:
選擇在8888端口上監聽,然后確定。夠選了SOCKS proxy,還能截獲到瀏覽器的http訪問請求。
第二步:配置SSL代理:
首先在charles的 Proxy選項選擇SSL Proxy Settings
然后在彈出的對話框中點擊add,添加需要監視的域名。域名支持 *號通配符,如:抓取所有的https請求,可以填寫 *:443
如果想要抓取qq.com的域名,可以填寫 *.qq.com
第三步 為手機設置代理
在手機無線中配置手動代理,輸入安裝Charles的電腦的網絡地址,端口填8888。
第四步 安裝根證書
在手機上安裝Charles的根證書:
以IOS為例,在Safri上打開Charles的根證書下載網址: chls.pro/ssl 。
順利的話會出現這樣的畫面,繼續點安裝,一路點確定。然后去設置里的描述文件管理如果看到有綠色的勾勾就說明安裝成功了。
接下來,在設置->通用->關于本機->證書信任設置 (這一步很重要) 剛剛安裝的證書的開關打開信任就可以抓取加密包了。
如果不能下載,檢查手機是否正確設置了代理,Charles是否已經打開并配置正確。
電腦端的根證書安裝
以MAC為例,直接在Charles的Help菜單中安裝;安裝完成后去系統的鑰匙串訪問中信任它。
完成后:試試看抓一下QQ空間的數據,將..qq.com 和*.qq.com 添加到SSL Proxy的Setting中后,配置好手機代理,打開手機QQ空間App
可以看到抓取到的報文如下:
幾點說明:
- 本文的操作指南是在MAC+iphone5s+Charles上實踐的。文中開頭已經講述了HTTPS使用中間人代理抓包的簡單原理和核心操作思想,其他環境下可以類比。
- 有些人認為https可以完美防止中間人攻擊,無法抓到https的明文包...... 其實是不對的,TLS的設計只能說是從技術上最大限度地保護網絡報文的安全,它無法防止用戶自己作死。
- 網絡安全和用戶的安全意識是強相關的,技術的防范能力總是有限的。在實際生活中養成良好的上網習慣,千萬不能隨意信任不明來源的證書,輕視瀏覽器、操作系統或其他App給我們發出的安全警告。
喜歡我點關注,共同分享技術,追求充實人生