专栏首页python前行者小米手机安装 charles 证书,提示“没有可安装的证书”

小米手机安装 charles 证书,提示“没有可安装的证书”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xc_zhou/article/details/102688494

相信很多开发和测试人员在工作过程中都会用到抓包工具,我平时习惯用charles抓包。所以这里主要讲charles证书问题。

在给手机设置完代理后,需要安装证书才能抓包。大部分手机都可以直接在浏览器中输入chls.pro/ssl 下载证书后直接安装证书,但是,小米确实个例外。不能直接安装。

问题:

通过浏览器下载的crt文件,提示证书无效,安装失败。

解决问题:

1、不要用小米手机自带的浏览器下载crt文件。

现下载一个第三方的浏览器(例如:uc浏览器,edge安卓浏览器),再下载crt文件。

2、安装证书:不要直接点击crt文件进行安装。

正确安装方法有2个:

其一:设置——WiFi——高级设置——安装证书

其二:设置—更多设置—系统安全—加密与凭据—从存储设备安装证书 当然,不想用了我们可以点击清除凭据,一键完成!

参考:https://blog.csdn.net/jinshitou2012/article/details/79044560 https://blog.csdn.net/shoneworn/article/details/80904675 https://www.cnblogs.com/yinzhuoqun/p/10316187.html


小米手机无法通过Charles抓取Https的数据怎么办?https的数据一直显示unknown

当你发现这个问题的时候,就不要再费力去设置charles以及换各种姿势去装证书了,这些都是徒劳的,因为从Android 7.0开始系统默认不信任用户证书,因此即时你安装成功,证书对APP来说也是无效的。

目前腾讯对微信的权限管的很严,小程序在模拟器上无法使用是普遍现象

  • 安卓版本7+并且微信版本7+ 使用Charles也不能代理请求怎么办?

究其缘由是微信调整了如下安全证书策略:

策略

安卓版本

微信版本

是否可以代理

A

7-

任意版本

B

7+

7-

C

7+

7+

1.安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书 2.安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书 3.安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表 4.苹果手机无任何影响。

问题原因:

1.在Android7.0及以上的系统中,每个应用可以定义自己的可信CA集集。 默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。 而回想我们抓包的过程,无论是fiddler还是Charles,想抓https,都必须手机安装对应的证书,通过fiddler/Charles安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。

2.在微信7.0版本之前,小程序对设备的代理证书无做校验处理,故只在设备安装代理证书,即使代理证书未信任为系统证书,也能抓取到HTTPS请求。

而7.0版本之后,小程序增加了代理证书的校验,所有未被信任的证书,均无法通过验证,所以,就出现了以上问题。

问题解决:

第一种解决方案:测试设备回退为微信7.0以下版本,如v6.7.3、v6.6.5等。然而现在已经失效 就算没有 也不是长久之计。 第二种解决方案:对Android7.0以上系统进行root操作,获取管理员权限,然后把代理证书(如fiddler、charles)改为系统证书即可。(推荐 长期有效 为此我特意用我的小米8实战了。) 第三种解决方案:使用IOS10以上苹果设备进行抓包,因为IOS系统可以一键信任证书,方便快捷。 第四种解决方案:那就是用别的抓包工具。 第五种解决方案:修改APP配置文件。

第一种解决方案:失效了 就不讲了。
第二种解决方案:将证书安装到系统证书中(需要root)

注意:我这里用的是小米8做测试。 小米手机自带root为不完整root,需要进行完整root(即解锁system)。 特别是我的小米8是稳定版,然后解锁好像什么狗屁限制要半个月 所以我绑定账号 过完年回来时间刚好。解锁后才能刷机,刷个开发版,刷完开发版后再次解锁获取root权限,权限获取后又要下载个狗屁MI-Syslock-1.0.6.apk用来解锁system系统区,这个时候才能复制粘贴到证书目录/system/etc/security/cacerts/。

  • 准备一台已经 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 系统证书)
设置 > 更多设置 > 系统安全 > 加密与凭据 > 信任的凭据[系统]
第三种解决方案:买部苹果手机就行啦。。。
第四种解决方案:用别的抓包工具
  • VirtualApp + HttpCanary

HttpCanary是一款强大的Android端抓包和注入工具,同样不需要root,软件本身支持安装证书,如果只是单独使用,依然跟其他APP一样;

这里还要介绍另外的一个产品,VirtualApp是一个开源的Android App虚拟化引擎,允许在其中创建虚拟空间,并在这个虚拟空间中运行其他应用。

简单的说,就是一个容器,可以进行双开处理,市面上很多双开的软件,原理就是这个;

点击后,就是双开了,然后再打开HttpCanary进行转包,比如点击微信的小程序,啧啧啧,发现啥了?

如果服务端没有加密的话,终于可以了,有点心累啊;

最后这两个app下载地址HttpCanary+VirtualApp:链接: https://pan.baidu.com/s/1BJQaFOhCZ14PZKm4OvV2Uw 提取码: z4dc

第五种解决方案:修改APP配置文件

直接修改APP的android:networkSecurityConfig属性,前提是可以获取到APP的源码。 在AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
    ... >
    ...
    </application>
</manifest>

配置文件:res/xml/network_security_config.xml

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" /> <!--信任系统证书-->
            <certificates src="user" overridePins="true" /> <!--信任用户证书-->
        </trust-anchors>
    </base-config>
</network-security-config>

然后重新打包抓包就可以了; 这种做法,除了在源码上修改,还有其他法子吗? 肯定的,如下: 先脱壳,也可以直接下载wdj的包,然后用apktool反编译apktool,就能看到包内容了,修改AndroidManifest.xml,同时新增network-security-config,修改完以后重新签名打包就可以; 不过这技术 大部分人不会 会也麻烦 每次都要修改。。。

参考:https://segmentfault.com/a/1190000011573699 http://aoye8.com/1143.html

下附一些解决方案,好像并不适用 链接:https://blog.csdn.net/u013630017/article/details/97750343 https://www.jianshu.com/p/4635aa405568 https://blog.csdn.net/shadowyspirits/article/details/79756274 https://blog.csdn.net/u011045726/article/details/76064048 https://tieba.baidu.com/p/5714077531?red_tag=1255192662

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 资深架构师的成长之路(技术详细介绍)

    众所周知,当下流行的编程语言有Java、PHP、C、C++、Python、Go等。其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,...

    Android技术干货分享
  • 最常见的Android内存优化方式及防止泄漏造成OOM总结篇

    内存优化目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例...

    Android技术干货分享
  • 如何使用JavaScript开发AR(增强现实)移动应用 (一)

    所谓AR(Augmented Reality), 即增强现实,是一种将通过计算机渲染出的虚拟图像与真实世界巧妙融合的手段,背后广泛运用了多媒体、三维建模、实时跟...

    Jerry Wang
  • “送给最好的TA.apk”简单逆向分析

    20190927收到一个apk,名字叫“送给最好的TA.apk”。文件哈希值如下:

    ChaMd5安全团队
  • 金九银十面试归来:这是一份用心整理的Android面试总结

    当收到HR的面试的通知还是很懵逼的,因为感觉自己突然啥都不会了,迅速镇定下来,去网上找了一下某度的面试题,但是发现都只有提问了什么并没有对所提问题的解答,那只能...

    Android技术干货分享
  • Android架构纵横谈之——软件自愈能力 (2)

    上回书(Android架构纵横谈之——软件自愈能力 (1))我们说到Android里的init会监测init.rc中启动的service并根据情况重启之。今回书...

    Linux阅码场
  • cordova环境搭建

    说明:gradle下载后,解压到硬盘某个目录即可;安装步骤:java->node->adb-studio

    sam dragon
  • AI实现测试人力的释放——腾讯WeTest参展谷歌开发者大会

    ? 导读 2019谷歌开发者大会(Google Developer Days)于9月10日正式在上海拉开帷幕。 90余名来自全球各地的大咖,带来了60余场精...

    WeTest质量开放平台团队
  • APP端测试系列(1)——通信安全

    关于APK包、Android架构等基础知识这里先不做介绍,直接介绍测试项和测试方法。

    Jayway
  • 一篇文章教你读懂UI绘制流程我的Android重构之旅:框架篇

    在我们开发的初期往往并不需要什么框架,因为 Android Framework 良好的容错性帮助我们避免了很多问题,甚至你不需要深入的学习就可以写出一个较为完善...

    Android技术干货分享

扫码关注云+社区

领取腾讯云代金券