这里说下我经常使用的代理抓包软件
- 图形化抓包工具fiddler
- 命令行 mitmproxy/mitmdump
重中之重:首先对于代理抓包工具,要抓取https协议接口,证书很重要,请按照各家代理软件提示去安装好,并信任;其次连接的网络属于同一局域网,且代理 host及port均设置正确
若提示Cannot establish TLS with client (sni: dragate.dc.oppomobile.com): TlsExcept ion("SSL handshake error: Error([('SSL routines', 'ssl3_read_bytes', 'sslv3 aler t certificate unknown')])")
,基本可判断为证书安装问题。
-------------------------------------------------------------------------------
若以上操作均正常,如果你用的恰好是android手机,莫慌;可以看看你们应用打印的错误日志,若是java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
,那么恭喜你,你来对地方了,你手机系统是不是7.0及以上?若是,再次恭喜你
这里大概说下原因,google自从7.0及以上系统,推出了更严格的网络完全机制,且你们开发也严格按照要求配置了network-security-config
,那么出现抓不到包也十有八九了,这正好符合google的目的,一切都是为了安全,避免数据泄露。
7.0系统后,默认情况下,来自所有应用的安全连接(使用 TLS 和 HTTPS 之类的协议)均信任预装的系统 CA(system区),而面向 Android 6.0(API 级别 23)及更低版本的应用默认情况下还会信任用户添加的 CA 存储区(user区)。而用于预装系统 CA 证书为 "system"区,用于用户添加的 CA 证书为 "user"区,所以知道为什么会报找不到证书路径了吧,压根不信任你安装在user区的证书呗。关于google 网络安全配置说明,详见:https://developer.android.com/training/articles/security-config
-------------------------------------------------------------------------------
解决办法:
- Android 只能用7.0以下系统的手机抓包
- 开发改变网络安全配置及其他手段,遵循不悖于google针对7.0及以上系统增强的安全策略,也方便调试
- 使用root手机,将代理软件的证书安装在system区,system 区目录:
/system/etc/security/cacerts/