一直沒有寫一篇關於charles的文章來記錄,但是發現偶爾還是會忘記,所以還是記一下,查起來比較方便。
首先在安裝了charles之后默認的本地代理地址是 127.0.0.1:8888這個地址。如果希望代理本地計算機的http流量或者socks流量,可以將代理地址設置到127.0.0.1:8888這個地址上,就能在charles上查看到現在正在使用的流量了。
其實我平時常用的代理並不是代理pc上的流量,因為現在大部分現代瀏覽器都自帶可以看包的功能,所以更多的時候,我可能需要使用它來代理我手機上的流量,特別是在測試接口和api的時候。
首先就是最常用的代理功能,將到達本機的流量映射到其他地址上面去。
Tool->Map-remote-setting
出現這個界面

點擊add增加映射設置

這里就是填寫從什么地址映射到什么地址。
例如我們要去往百度代理到我們自己的地址上來。
上面就可以設置百度的host www.baidu.com 然后port80 或者8080
下面設置上我們自己去往的地址 比如 zhizhizhi.me 然后設置端口即可。
如果要讓charles能看到https包里面的內容,首先我們需要在自己的電腦中安裝charles的根證書,並且對其進行信任。
Help->SSLProxying-> Install Charles Root Certificate。 對其進行安裝並且對其進行信任。
然后啟用charles的SSL代理
Proxy-> SSL Proxy Setting
勾選 Enable SSL Proxying

並且設置由服務器所屬根證書簽發的客戶端證書,這里我使用的一個p12格式的證書。 然后指定監聽的代理host

至此,charles就可以代理你對目標服務器的https請求了。
如果你需要charles代理你的手機訪問目標地址的https ,還需要在手機上安裝charles證書,方法也很簡單。
Help->SSL Proxying-> Install Charles Root Certificate Devices Or Remote Browser 這個時候會給你一個安裝證書的內網地址
訪問該地址即可下載安裝charles證書。
這里代理SSL流量的原理也很簡單:
為什么要裝charles根證書:
因為charles最終代理我們的ssl流量是要發回給我們的,而這個過程是我們和本地charles代理的ssl通信,如果我們沒有charles簽發的根證書,那么我們將無法信任charles轉發的任何ssl流量。
另外由於我們在charles里面設置了和服務器對應的客戶端證書PKCS12格式的包文件(pkcs12中包含被根證書簽出來的公私鑰),所以我們可以解密由指定host服務器發送過來的加密的數據,從而像抓包http包一樣看到這些數據包里面的數據。charles負責代替我們和該服務器發送接收加密數據,而我們還需要和chales本身再進行一次通信,這樣說 應該就比較明確了。
Reference:
https://en.wikipedia.org/wiki/PKCS_12 PKCS12wiki
