手机屏幕在搬运共享尿检机器的过程中因公殉职,恰逢小米MIX2发布,被勾引了,入手了第一部小米手机。
安装ssl证书
失败现场
- 按照Charles的提示,手机打开
chls.pro/ssl
- 小米通过自带浏览器(QQ浏览器或者其它浏览器未测)下载得到一个
getssl.crt
证书 - 设置 > 更多设置(系统和设备) > 系统安全 > 从存储设备安装
选择第二步骤获取到的证书,会弹窗提示
没有可安装的证书。
,换个姿势再来一次。
再试一次
- 按照Charles的提示,设置好 Proxy->Mac Proxy(Windows同理设置启用本机器代理服务),PC打开
chls.pro/ssl
- 下载得到一个
charles-proxy-ssl-proxying-certificate.pem
证书 - 传送到手机(姿势自选)
- 设置 > 更多设置(系统和设备) > 系统安全 > 从存储设备安装
姿势正确。
其他问题(2019/01/14)
You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.
- 打开Charles,Help->SSL Proxying->Install Charles Root Certificate
- 双击带叉的Charles证书,设置信任证书
注:以上两步骤能解决网页的问题,不能解决 android7+ 并且 微信7+ 的证书信任问题
安卓版本7+并且微信版本7+ 使用Charles也不能代理请求怎么办?
最近微信由体验版主动升级到了微信7.0,发现Charles代理请求的时候报错了:
request:fail ssl hand shake error
究其缘由是微信调整了如下安全证书策略:
策略 | 安卓版本 | 微信版本 | 是否可以代理 |
A | 7- | 任意版本 | 是 |
B | 7+ | 7- | 是 |
C | 7+ | 7+ | 否 |
为什么策略 C 不能代理了?
参考资料提到默认情况下,针对 Android 7.0 (API level 24) 的应用不再信任用户或管理员添加的CA证书来进行安全连接。(之前我们其实是将安全证书安装到安卓手机上作为用户信任安全证书,新版本如果APP开启了设置我们的代理请求会被认为是不安全的。)
如何在安卓7.0以及以上版本代理?
- 准备一台已经 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
- 准备 Charles 证书文件
# 以下执行命令都是以证书文件在当前目录为前提
# 获取证书步骤
Help -> SSL Proxying -> Save Charles Root Certificate...
# 计算 Certificate_Hash 命令
openssl x509 -subject_hash_old -in <Certificate_File>
# 重命名 `<Certificate_File>` 为 `<Certificate_Hash.0>`
mv <Certificate_File> <Certificate_Hash.0>
- 安装证书到安卓系统证书目录
/system/etc/security/cacerts
# 安装命令
adb push <Certificate_Hash>.0 /system/etc/security/cacerts
- 启用证书
# 开启步骤以小米新版本为例(如参考图倒数第二个即为我们安装的 Charles 系统证书)
设置 > 更多设置 > 系统安全 > 加密与凭据 > 信任的凭据[系统]