https的了解:http://www.reibang.com/p/870451cb4eb0
chales對https抓包的原理:http://www.reibang.com/p/405f9d76f8c4
只用看對應的部分,覺得還是寫的挺詳細的
如果不做任何配置抓取https肯定是會失敗的,默認的配置只能夠抓取http
配置
- 電腦端安裝證書 help->ssl proxying->install charles root certificate 確保安裝后添加了信任
- 手機端連接和pc同一局域網(wǎng)的wifi,wifi配置代理為pc端的本地地址,端口地址為8888(默認,可在proxying setting中修改)
- 手機端連接后,原生瀏覽器查看help->ssl proxying->XXXbrowse to http://xxx的地址,下載并安裝證書,添加信任
- ssl proxying設(shè)置https信賴的host地址
完成后對大部分的https都基本能夠正常的抓取
錯誤及處理
SSLHandshake: Received fatal alert: certificate_unknown
You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.
提示我們的證書認證失敗,可是我們之前不是都安裝證書并且添加信任了嗎,為什么會這樣呢,原來在Android 7.0(API 24 ) ,有一個名為“Network Security Configuration”的新安全功能。這個新功能的目標是允許開發(fā)人員在不修改應用程序代碼的情況下自定義他們的網(wǎng)絡(luò)安全設(shè)置。如果應用程序的SDK高于或等于24,則只有系統(tǒng)證書才會被信任棚饵。所以用戶導入的Charles根證書是不被信任的。知道原因后,就可以找解決辦法了
- 重新打包apk,反編譯目標apk,強行修改gradle配置中targetsdk的version為小于24后打包運行
- 最方便的就是直接使用一個版本小于7.0的手機來進行抓包
另外這里有一點要說一下,并不是所有的app我們都能這樣抓包,
- 是客戶端通過指定的方式來只信任某一個證書,這樣我們中間人返回的信息證書認證就會失敗
- 通常只有客戶端驗證服務(wù)端公鑰證書是不是合法,但是有些app采用的是雙向驗證,在通信過程中楼镐,服務(wù)器會驗證app的公鑰證書喷橙,這時候啥么,就沒辦法使用中間人攻擊的方式(Charles)抓包了