mitmproxy是一個(gè)支持HTTP和HTTPS的抓包程序,類似Fiddler、Charles的功能,只不過它通過控制臺(tái)的形式操作。
此外,mitmproxy還有兩個(gè)關(guān)聯(lián)組件,一個(gè)是mitmdump,它是mitmproxy的命令行接口,利用它可以對(duì)接Python腳本,實(shí)現(xiàn)監(jiān)聽后的處理;另一個(gè)是mitmweb,它是一個(gè)Web程序,通過它以清楚地觀察到mitmproxy捕獲的請(qǐng)求。
本節(jié)中,我們就來了解一下mitmproxy、mitmdump和mitmweb的安裝方式。
1. 相關(guān)鏈接
GitHub:https://github.com/mitmproxy/mitmproxy
官方網(wǎng)站:https://mitmproxy.org
PyPI:https://pypi.python.org/pypi/mitmproxy
官方文檔:http://docs.mitmproxy.org
mitmdump腳本:http://docs.mitmproxy.org/en/stable/scripting/overview.html
2. pip安裝
最簡單的安裝方式還是使用pip,直接執(zhí)行如下命令即可安裝:
pip3 install mitmproxy
這是最簡單和通用的安裝方式,執(zhí)行完畢之后即可完成mitmproxy的安裝,另外還附帶安裝了mitmdump和mitmweb這兩個(gè)組件。如果不想用這種方式安裝,也可以選擇后面列出的專門針對(duì)各個(gè)平臺(tái)的安裝方式或者Docker安裝方式。
3. Windows下的安裝
可以到GitHub上的Releases頁面(鏈接為:https://github.com/mitmproxy/mitmproxy/releases/)獲取安裝包,如圖1-59所示。
圖1-59 下載頁面

比如,當(dāng)前的最新版本為2.0.2,則可以選擇下載Windows下的exe安裝包mitmproxy-2.0.2-windows-installer.exe,下載后直接雙擊安裝包即可安裝。
注意,在Windows上不支持mitmproxy的控制臺(tái)接口,但是可以使用mitmdump和mitmweb。
4. Linux下的安裝
在Linux下,可以下載編譯好的二進(jìn)制包(下載地址https://github.com/mitmproxy/mitmproxy/releases/),此發(fā)行包一般是最新版本,它包含了最新版本的mitmproxy和內(nèi)置的Python 3環(huán)境,以及最新的OpenSSL環(huán)境。
如果你的環(huán)境里沒有Python 3和OpenSSL環(huán)境,建議使用此種方式安裝。
下載之后,需要解壓并將其配置到環(huán)境變量:
tar -zxvf mitmproxy-2.0.2-linux.tar.gz
sudo mv mitmproxy mitmdump mitmweb /usr/bin
這樣就可以將3個(gè)可執(zhí)行文件移動(dòng)到了/usr/bin目錄。而一般情況下,/usr/bin目錄都已經(jīng)配置在了環(huán)境變量下,所以接下來可以直接調(diào)用這3個(gè)工具了。
5. Mac下的安裝
Mac下的安裝非常簡單,直接使用Homebrew即可,命令如下:
brew install mitmproxy
執(zhí)行命令后,即可完成mitmproxy的安裝。
6. Docker安裝
mitmproxy也支持Docker,其DockerHub的地址為https://hub.docker.com/r/mitmproxy/mitmproxy/。
在Docker下,mitmproxy的安裝命令為:
docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmdump
這樣就在8080端口上啟動(dòng)了mitmproxy和mitmdump。
如果想要獲取CA證書,可以選擇掛載磁盤選項(xiàng),命令如下:
docker run --rm -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy -p 8080:8080 mitmproxy/mitmproxy mitmdump
這樣就可以在~/.mitmproxy目錄下找到CA證書。(C:\Users\Administrator\.mitmproxy)
另外,還可以在8081端口上啟動(dòng)mitmweb,命令如下:
docker run --rm -it -p 8080:8080 -p 127.0.0.1:8081:8081 mitmproxy/mitmproxy mitmweb
更多啟動(dòng)方式可以參考Docker Hub的安裝說明。
7. 證書配置
對(duì)于mitmproxy來說,如果想要截獲HTTPS請(qǐng)求,就需要設(shè)置證書。mitmproxy在安裝后會(huì)提供一套CA證書,只要客戶端信任了mitmproxy提供的證書,就可以通過mitmproxy獲取HTTPS請(qǐng)求的具體內(nèi)容,否則mitmproxy是無法解析HTTPS請(qǐng)求的。
首先,運(yùn)行以下命令產(chǎn)生CA證書,并啟動(dòng)mitmdump:(C:\Users\Administrator\.mitmproxy)
mitmdump
接下來,我們就可以在用戶目錄下的.mitmproxy目錄里面找到CA證書,如圖1-60所示。
圖1-60 證書文件

證書一共5個(gè),表1-1簡要說明了這5個(gè)證書。
表1-1 5個(gè)證書及其說明
名稱描述
mitmproxy-ca.pemPEM格式的證書私鑰
mitmproxy-ca-cert.pemPEM格式證書,適用于大多數(shù)非Windows平臺(tái)
mitmproxy-ca-cert.p12PKCS12格式的證書,適用于Windows平臺(tái)
mitmproxy-ca-cert.cer與mitmproxy-ca-cert.pem相同,只是改變了后綴,適用于部分Android平臺(tái)
mitmproxy-dhparam.pemPEM格式的秘鑰文件,用于增強(qiáng)SSL安全性
下面我們介紹一下Windows、Mac、iOS和Android平臺(tái)下的證書配置過程。
Windows
雙擊mitmproxy-ca.p12,就會(huì)出現(xiàn)導(dǎo)入證書的引導(dǎo)頁,如圖1-61所示。
圖1-61 證書導(dǎo)入向?qū)?/p>

直接點(diǎn)擊“下一步”按鈕即可,會(huì)出現(xiàn)密碼設(shè)置提示,如圖1-62所示。
圖1-62 密碼設(shè)置提示

這里不需要設(shè)置密碼,直接點(diǎn)擊“下一步”按鈕即可。
接下來需要選擇證書的存儲(chǔ)區(qū)域,如圖1-63所示。這里點(diǎn)擊第二個(gè)選項(xiàng)“將所有的證書都放入下列存儲(chǔ)”,然后點(diǎn)擊“瀏覽”按鈕,選擇證書存儲(chǔ)位置為“受信任的根證書頒發(fā)機(jī)構(gòu)”,接著點(diǎn)擊“確定”按鈕,然后點(diǎn)擊“下一步”按鈕。
圖1-63 選擇證書存儲(chǔ)區(qū)域

最后,如果有安全警告彈出,如圖1-64所示,直接點(diǎn)擊“是”按鈕即可。
圖1-64 安全警告

這樣就在Windows下配置完CA證書了。
Mac
Mac下雙擊mitmproxy-ca-cert.pem即可彈出鑰匙串管理頁面,然后找到mitmproxy證書,打開其設(shè)置選項(xiàng),選擇“始終信任”即可,如圖1-65所示。
圖1-65 證書配置

iOS
將mitmproxy-ca-cert.pem文件發(fā)送到iPhone上,推薦使用郵件方式發(fā)送,然后在iPhone上可以直接點(diǎn)擊附件并識(shí)別安裝,如圖1-66所示。
圖1-66 證書安裝頁面

點(diǎn)擊“安裝”按鈕之后,會(huì)跳到安裝描述文件的頁面,點(diǎn)擊“安裝”按鈕,此時(shí)會(huì)有警告提示,如圖1-67所示。
圖1-67 安裝警告頁面

繼續(xù)點(diǎn)擊右上角的“安裝”按鈕,安裝成功之后會(huì)有已安裝的提示,如圖1-68所示。
圖1-68 安裝成功頁面

如果你的iOS版本是10.3以下的話,此處信任CA證書的流程就已經(jīng)完成了。
如果你的iOS版本是10.3及以上版本,還需要在“設(shè)置”→“通用”→“關(guān)于本機(jī)”→“證書信任設(shè)置”將mitmproxy的完全信任開關(guān)打開,如圖1-69所示。此時(shí),在iOS上配置信任CA證書的流程就結(jié)束了。
圖1-69 證書信任設(shè)置

Android
在Android手機(jī)上,同樣需要將證書mitmproxy-ca-cert.pem文件發(fā)送到手機(jī)上,例如直接復(fù)制文件。
接下來,點(diǎn)擊證書,便會(huì)出現(xiàn)一個(gè)提示窗口,如圖1-70所示。
圖1-70 證書安裝頁面

這時(shí)輸入證書的名稱,然后點(diǎn)擊“確定”按鈕即可完成安裝。