為爬蟲獲取登入cookies:charles工具的使用

王平發表於2018-12-03

“工欲善其事,必先利其器”。前面我們提到分析登入過程的工具,今天,我們就來介紹其中一款工具——Charles的使用。

Charles debug抓包工具

1. Charles 簡介

好多人把它叫做抓包工具,好像也沒什麼不對。但官方把它定義為一個代理(Proxy)。我們看看官方是怎麼說的:

Charles是一個HTTP代理(或HTTP監視器,或反向代理),可以讓開發者觀察到他們的機器和網際網路之間的所有HTTP和SSL/HTTPS流量。這包括請求,響應和HTTP標頭(包含cookie和快取資訊)。

Charles 使用Java開發,支援Windows、macOS、Linux作業系統:

Charles支援的作業系統

並且,讓Windows和macOS使用者有福的是,它支援系統代理設定,也就是用它設定為系統代理,就不用再去設定瀏覽器代理了。老猿我就比較悲催了,用Ubuntu就沒這個福利了,啟動Charles後還有設定Chrome的代理。好在我用SwitchyOmega(你懂的),新增一個代理指向Charles也不是什麼難事兒。

2. Charles的下載安裝

我們去官網下載一個免費試用版,有30天的試用期,不過每次執行半小時就不能使用了,需要重新執行charles。
選擇適合你的系統的版本下載安裝即可。安裝過程是傻瓜式的,一路點下一步即可。

3. Charles的配置:http 代理

以Windows為例(macOS類似)
執行Charles,在Windows系統下,已經預設設定為系統代理,可以在左邊欄看到已經記錄的http請求(如果有請求的話)。點選選單“Proxy”可以看到預設的系統設定。如下圖所示:

Charles Windows設定

圖中綠色方框就是已經選中Windows Proxy(系統代理),橙色框中便是它記錄的http請求。點選紅框中的“Proxy Settings…”選單,可以修改代理埠,預設的是8888:

Charles HTTP代理埠

Windows下的Chrome瀏覽器預設使用系統代理,這時候你用Chrome開啟網頁就可以看到Charles記錄的請求了。

Ubuntu(Linux)下配置Chrome瀏覽器
Ubuntu下就沒有前面圖中類似綠色框中的”Linux Proxy”可以選擇,我們需要自己去Chrome瀏覽器設定代理,然而Chrome是使用系統代理的。於是,我們有兩種選擇來設定Chrome使用Charles的代理:

(1) 去系統設定裡面把系統代理設定成Charles的8888埠
開啟 System Settings -> Network,選擇 Network proxy,如圖所示:

Ubuntu 系統代理設定

(2)像老猿我這樣使用SwitchyOmega外掛
開啟外掛的配置頁面,點選左側的New profile按鈕,填寫名稱並建立:

SwitchyOmega新建代理

填寫代理的地址為 127.0.0.1,埠為8888 :

SwitchyOmega代理配置

填寫後,左側的 Apply changes 按鈕變成綠色,點選它儲存配置。
以後需要使用Charles和Chrome分析網站時,只需選擇SwitchyOmega 的這個代理即可。

Ubuntu(Linux)下配置Firefox瀏覽器

開啟 Firefox 的 Preference -> General -> Network Settings 進行代理配置:

Firefox 代理設定

看上圖,同樣對於Firefox 也有兩種使用代理的方式:

  • Use system proxy settings : 使用系統代理
  • Manual proxy configuration : 手動設定代理

4. Charles的配置: HTTPS/SSL代理

上面的配置,是針對HTTP的,也就是非加密的請求的設定,但是現在的網路環境是加密傳輸(HTTPS)已經相當普及,所以我們要對SSL/HTTPS 做相應的配置,讓Charles也能捕獲並解析HTTPS傳輸。

如果不配置的話,捕獲到的HTTPS內容會是亂碼,如圖:

charles no ssl

我們可以看到,凡是HTTPS傳輸的,都是,右邊的內容也是很多亂碼。

小猿們應該已經知道了,HTTPS加密傳輸靠的是CA證照,配置Charles支援HTTPS也就是把Charles自己的CA證照匯入到系統或瀏覽器。

(1)啟用並配置 Charles的SSL 代理
點選選單 Proxy -> SSL Proxying Settings,選中 “Enable SSL Proxying”,點選“Add”,Host填寫*(即對所有網站使用代理),Port填寫 443,點選OK儲存即可。如圖:

charles windows ssl

(2)Windows匯入Charles的根證照
點選選單 Help -> SSL Proxying -> Install Charles Root Certificate,

charles windows上安裝ca證照

會跳出匯入證照的視窗,點選 “安裝證照”,一步一步安裝即可。

charles-windows-CA-install

這種方式匯入的證照只對Windows自帶的IE瀏覽器生效,而對Firefox、Chrome等第三方瀏覽器要自己從瀏覽器匯入證照。如果第三方瀏覽器不匯入Charles的根證照,訪問HTTPS網站時,就會是這樣的:

charles證照安裝通過

同樣的,在macOS系統下用這種方式匯入的證照只對macOS自帶的Safari瀏覽器生效。

(3)Chrome匯入Charles的根證照
Charles證照的獲得有兩種方式:
一種是從軟體裡面Save為檔案,點選選單 Help -> SSL Proxying -> Save Charles Root Certificate… 儲存為檔案。

charles匯出ca證照

另一種方法是,Chrome啟用Charles代理,訪問 chls.pro/ssl 即可下載證照。

得到證照檔案後,通過 選單: 設定->高階-> 管理證照 開啟證照管理視窗,點選“受信任的根證照頒發機構”,再點選“匯入…”按鈕,選擇剛才得到的證照匯入即可,如圖:

charles chrome匯出出CA證照

匯入證照成功後,記得要重啟Chrome瀏覽器,讓證照生效。
這樣,Charles就可以解密Chrome的HTTPS傳輸了。Firefox匯入證照的方法類似,就不再詳述。使用Firefox的小猿們可以自己試試看。

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章