安卓版本7+并且微信版本7+ 使用mitmproxy也不能代理请求怎么办?
- 究其缘由是微信调整了如下安全证书策略:
策略 | 安卓版本 | 微信版本 | 是否可以代理 |
---|---|---|---|
A | 7- | 任意版本 | 是 |
B | 7+ | 7- | 是 |
C | 7+ | 7+ | 否 |
为什么策略 C 不能代理了?
参考资料提到默认情况下,针对 Android 7.0 (API level 24) 的应用不再信任用户或管理员添加的CA证书来进行安全连接。(之前我们其实是将安全证书安装到安卓手机上作为用户信任安全证书,新版本如果APP开启了设置我们的代理请求会被认为是不安全的。)
如何在安卓7.0以及以上版本代理?
1. 准备一台已经 root
的手机
# 手机 root 方法参考各手机 root 教程,小米手机在 Windows 电脑下载[解锁工具](//www.miui.com/unlock/index.html),开启 fastboot 模式,手机端启用 root 权限(注意备份好手机上的数据到电脑)
# 以小米手机为例来开启 root 权限后设置 /system 目录为读写
# 以 root 权限执行
adb root
# 解决目录 read only 关键命令行
adb disable-verity
# 重启
adb reboot
# 以 root 权限运行
adb root
# 重新挂载
adb remount
# 设置读写
adb shell mount -o rw,remount /system
2. 准备mitmproxy
证书文件
WIN 或者Linux 在mitmdump第一次运行会在用户目录生成对应的文件
[root@centos .mitmproxy]# pwd
/root/.mitmproxy
[root@centos .mitmproxy]# ll
总用量 32
-rw-r--r--. 1 root root 1318 4月 23 18:35 c8750f0d.0
-rw-r--r--. 1 root root 13 5月 29 15:31 config.yml
-rw-r--r--. 1 root root 1318 4月 17 10:11 mitmproxy-ca-cert.cer
-rw-r--r--. 1 root root 1140 4月 17 10:11 mitmproxy-ca-cert.p12
-rw-r--r--. 1 root root 1318 4月 17 10:11 mitmproxy-ca-cert.pem
-rw-------. 1 root root 2529 4月 17 10:11 mitmproxy-ca.p12
-rw-------. 1 root root 3022 4月 17 10:11 mitmproxy-ca.pem
-rw-r--r--. 1 root root 770 4月 17 10:11 mitmproxy-dhparam.pem
# 计算 Certificate_Hash 命令
openssl x509 -subject_hash_old -in <Certificate_File>
# 重命名 `<Certificate_File>` 为 `<Certificate_Hash.0>`
mv <Certificate_File> <Certificate_Hash.0>
[root@centos .mitmproxy]# openssl x509 -subject_hash_old -in mitmproxy-ca-cert.cer
c8750f0d
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIGDm87Dm2OMA0GCSqGSIb3DQEBCwUAMCgxEjAQBgNVBAMM
CW1pdG1wcm94eTESMBAGA1UECgwJbWl0bXByb3h5MB4XDTIwMDQxNTAyMTEzNloX
DTIzMDQxNzAyMTEzNlowKDESMBAGA1UEAwwJbWl0bXByb3h5MRIwEAYDVQQKDAlt
aXRtcHJveHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDY9S8ArBe
BBiUDzoc/vOsxUJIim3yOyD8wTS//I2GZUi+Avnyejm1NsLK4xMWtN7avJSGQ+6f
UoS4QlnMkvqPT2OpuXhZ695V6LN9vE4uTX8Y0LFmhFjcyZFigBCl+7tbPHugDque
pht9KDOz4vvqpY0cguFGivpDqSicU2XGDgjuF70xv2eICbVUJFrORE4hyxoTWtDb
6BR52JlhTzW9uH8kP0ux7hJYMayOILPp1YW5csXUhSfZeFeSRAs9IfCTqpKIvjy6
995C540V2Te2HyP2rYtxhb92VFtYarhm+xu8pL1BNdqa1aULYvXoGllDDiFOU3ie
1xM1wZ2E8kt1AgMBAAGjgdAwgc0wDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhC
AQEEBAMCAgQweAYDVR0lBHEwbwYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcD
BAYIKwYBBQUHAwgGCisGAQQBgjcCARUGCisGAQQBgjcCARYGCisGAQQBgjcKAwEG
CisGAQQBgjcKAwMGCisGAQQBgjcKAwQGCWCGSAGG+EIEATAOBgNVHQ8BAf8EBAMC
AQYwHQYDVR0OBBYEFHfmNoYwAG7JAHpQzwy+iSMqMC0dMA0GCSqGSIb3DQEBCwUA
A4IBAQBYhJ9OWBSLwliuNQdph3U57q6WXEdCpIxuke5dHeAZYe1tYuKbD7nTPWT1
euyphM2tBfaM0GTCKScIgarts+lAmgbc1MvA7Kc2ioBfYVheZKxC3BO4wpJFP9zb
O2VGY5n+IBDM3wLurLw/qd8u251VDjwlU65lj7A+OrbiGmN/oC1BOnOT3esJ7AK9
lkfFLWfX8lD6g4/WCwvhQnuuY5zFULm+CvDtCZRKTZtzPdhEhiSHQz+tFrBTN3tx
Lmc3g8ww9w7/nH+MF0WKOfTwAqP51xryymqhZ2tr2xpaD7Hd0iq2T9vmD2g01K8Q
BhA9gFnS+HTePOlMIICKDuygtZLj
-----END CERTIFICATE-----
3. 安装证书到安卓系统证书目录 /system/etc/security/cacerts
# 安装命令
adb push <Certificate_Hash>.0 /system/etc/security/cacerts
4.启用证书
# 开启步骤以小米新版本为例(找到安装的 mitmproxy 系统证书)
设置 > 更多设置 > 系统安全 > 加密与凭据 > 信任的凭据[系统]