# Android7.0 whistle 抓包HTTPS证书无效解决方法

# 背景原因

最近做小程序h5开发,调试过程中发现android 系统微信7.0以上版本无法抓取https 请求日志,查阅资料得出以下结论:

  • 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
  • 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表

所以在android系统中whistle抓包工具中才无法获取https相关日志,苹果IOS系统则默认会信任用户安装的证书,没有这个问题

# 解决方式

注意:前提android手机需要获取root权限,具体root方法请查阅相关资料 这里以小米8手机为例:

# 获取root权限方法

# 证书文件重新命名

此过程是将证书文件rootCA.crt重新命名为hash值文件,文件名hash.0,以.0后缀结尾,hash通过以下命令方式计算得来

  • w2 start启动whistle抓包工具并下载rootCA.crt证书文件
  • 计算hash值,打开终端cmd窗口,运行以下命令,
openssl x509 -subject_hash_old -in rootCA.crt

得到如下结果 e2bbc20f即为该文件的hash

BelieverdeMacBook-Pro:Downloads ruanjq$ openssl x509 -subject_hash_old -in rootCA.crt
e2bbc20f
-----BEGIN CERTIFICATE-----
MIID9DCCAtygAwIBAgIBATANBgkqhkiG9w0BAQsFADCBhTEhMB8GA1UEAxMYd2hp
c3RsZS4xNTU0ODA0MTMzNDkxODkxMQswCQYDVQQGEwJDTjELMAkGA1UECBMCWkox
CzAJBgNVBAcTAkhaMSQwIgYDVQQKExsxNTU0ODA0MTMzNDkxODkxLndwcm94eS5v
cmcxEzARBgNVBAsTCndwcm94eS5vcmcwHhcNMTgwNDA5MTAwMjEzWhcNMjkwNDA5
MTAwMjEzWjCBhTEhMB8GA1UEAxMYd2hpc3RsZS4xNTU0ODA0MTMzNDkxODkxMQsw
CQYDVQQGEwJDTjELMAkGA1UECBMCWkoxCzAJBgNVBAcTAkhaMSQwIgYDVQQKExsx
NTU0ODA0MTMzNDkxODkxLndwcm94eS5vcmcxEzARBgNVBAsTCndwcm94eS5vcmcw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD5vm4twleqKMCQbdD7BbRH
k4CwJL79Bpj8Nl7z9En3KTc6emfYqVd2VejXqRky0zVi90HGG9sEXQikQBb8Gmm9
qIGQ2wtUMTCHuLUOnfaNCqX0Tfd8Ln29yl0hHSln5b+PyUcFs+nGHmNcgdEQVIAe
lGQO77iChU3Sm8jLm7m8KDygPG+lctF5key2o+EOY4bKfrR3w+eB1lCIpkVUDmkF
i0YL0igWRCvqVQSjVsEFmNXtSptf2KEo4vJt1Nkxg3TTUl31p00LQg9utlpCcAps
7bYyBH6ZtOZHdxLKw9YHcOXkwFki6fbd3kZkkSBr2rHHo+RzsO+OzFJ76ob+Be7t
AgMBAAGjbTBrMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgL0MDsGA1UdJQQ0MDIG
CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
CDARBglghkgBhvhCAQEEBAMCAPcwDQYJKoZIhvcNAQELBQADggEBAH+vvldg9cdC
a+cuCYRMHDdSB1UoLyChSmVZepnHMoKy1ut/9qzyBY/VPjHydZsPtxlvi/zT1dFq
bHnXeJGy2FI2K9mP9HYs7kH5SAOP5L6u/VFzJnH3VyEDhVkSqGI0BaSt2cDx7fJO
g72qanafk6ppAhwbh+4O0KxjxiNfs0McV7zNPOGa5iNr/l2JtpIFkNk6k982KT5I
tIw9hC1lv/w8iGJ3I4FOcJIsG9VrmkJ17yWteGKQrKvCs5flQ8w2kVlwQckODghj
Cd3a10/wXQpMGJj+EfQCAd4XK2E3zfEHOfDJMuadoV1VVt4NS6jwpfijlLnJm/Yn
ULeLrERu7Ow=
-----END CERTIFICATE-----
BelieverdeMacBook-Pro:Downloads ruanjq$
  • rootCA.crt文件重新命令为hash.0,(比如我这里就改为 e2bbc20f,直接通过电脑重新命名文件即可,不需要通过命令方式)

# 证书文件添加到系统证书目录

证书文件添加到系统证书目录有2种方式:

  • 手机安装RE文件管理器(Root Explorer),通过RE文件管理器hash.0证书文件复制到系统证书目录/system/etc/security/cacerts/下面
  • 安装adb开发工具,通过命令的形式将文件push到目录/system/etc/security/cacerts/下面

# RE文件管理器方式

  • hash.0证书文件发送到手机文件
  • 下载并安装RE文件管理器,并将该软件开启root权限
  • 进入RootExplorer管理器,将hash.0证书文件复制到/system/etc/security/cacerts/文件夹下,并把文件的权限设置成rw-r-r-
  • 重启手机,进入 设置——系统安全——加密与凭据--信任的凭证——系统标签 里查看证书是否开启状态

# adb工具方式

  • 下载并安装adb工具,这里以mac电脑为例
brew install Caskroom/cask/android-platform-tools # 没有安装homebrew的先安装homebrew
  • adb工具安装完成后,依次执行以下操作(以下命令运行没有报任何错误,则代表证书push成功)
adb devices # 测试adb是否安装成功,成功了会出现设备的hash值
adb root
adb disable-verity # 禁用系统验证
adb push e2bbc20f.0 /system/etc/security/cacerts # 安装证书到安卓系统证书目录
adb root
  • 重启手机,进入 设置——系统安全——加密与凭据--信任的凭证——系统标签 里查看证书是否开启状态

# 验证安装成功

重启手机,进入 设置——系统安全——加密与凭据--信任的凭证——系统标签 里查看证书,本人这里装了2个证书,自己电脑和公司电脑 Android7.0 whistle 抓包HTTPS证书无效解决方法

# 注意

  • 其他抓包工具Charles,Fiddler等方法类似,本质的方法是将用户证书添加到系统证书目录,系统证书会默认信任获取HTTPS请求日志。
  • 获取root权限过程中可能会导致手机异常情况,请谨慎操作。