之前一直是在本地环境跑 mitmproxy 抓包做分析工作,近期需要将 mitmproxy 结合脚本进行数据抓取,为了便利性所以考虑将服务部署到服务器上,期间遇到不少问题,走了不少弯路,这里简要的记录一下。
一、安装 mitmproxy
安装是非常简单的,直接 apt-get install mitmproxy
即可,安装好之后,运行 mitmproxy 就可以抓包了,但是 http 可以,https 不行,参考网上的说法,需要在 ubuntu 服务器上配置一下证书。
二、安装证书到 ubuntu 服务器(不一定必要)
这一步应该不需要,理论上是用于 ubuntu上客户端浏览器的。病急乱投医,参考网上的说法做了下操作,当时并未解决我的问题。
安装好 mitmproxy 之后,mitmproxy 会在用户的家目录下建立 .mitmproxy 目录,并将证书生成在该目录中。
mkdir /usr/share/ca-certificates/extra
cp ./mitmproxy/mitmproxy-ca-cert.cer /usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt
update-ca-certificates # 添加证书
三、测试 mitmproxy
mitmdump --listen-port=8880 --set block_global=false --set proxy_debug -vvv
这个命令比较关键,如果要监听外网流量,block_global 必须设置为 false。
如果遇到抓包异常,开启 --set proxy_debug -vvv 把详细的日志打印出来,非常关键。
我这边当时 https 连接失败,从日志上看就是连接反复被断开,从现象上看就是 https 连接失败,打开 debug 日志就可以看到详细情况了:
36.106.224.20:19884: clientconnect
::ffff:36.106.224.20:19884: Set new server address: mp.weixin.qq.com:443
::ffff:36.106.224.20:19884: serverconnect
-> ('mp.weixin.qq.com', 443)
::ffff:36.106.224.20:19884: Establish TLS with server
::ffff:36.106.224.20:19884: ALPN selected by server: h2
::ffff:36.106.224.20:19884: Establish TLS with client
::ffff:36.106.224.20:19884: ALPN for client: b'h2'
36.106.224.20:19884: CONNECT mp.weixin.qq.com:443
Host: mp.weixin.qq.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) MicroMessenger/6.8.0(0x16080000) MacWechat/3.2.1(0x13020110) Chrome/39.0.2171.95 Safari/537.36 NetType/WIFI WindowsWechat
Connection: keep-alive
Proxy-Connection: keep-alive
<< Cannot establish TLS with client (sni: mp.weixin.qq.com): TlsException("SSL handshake error: SysCallError(-1, 'Unexpected EOF')",)
::ffff:36.106.224.20:19884: serverdisconnect
通过在 google 搜索,找到原因是客户端配置的证书问题(由于之前在本地抓 https 数据包都正常,所以一直认为本地证书是正常的,早已经安装过 mitmproxy 的证书)。
四、本地安装 mitmproxy 证书
本地设置代理之后,访问 mitm.it 之后,下载客户端相应的证书,并双击安装证书,并设置证书的使用范围
Double-click the PEM file to open the Keychain Access application.
Locate the new certificate "mitmproxy" in the list and double-click it.
Change Secure Socket Layer (SSL) to Always Trust.
Close the dialog window and enter your password if prompted.
设置好之后,就能愉快的抓包了。