iOS小技能:Charles抓包【应用场景:App联调测试】

简介: Charles 支持的协议:HTTP/1.1、HTTPS、HTTP/2、ws(WebSocket)、wss(WebSocket Secure,TLS 加密的 WebSocket)、SOCKS

前言

Charles 支持的协议:HTTP/1.1、HTTPS、HTTP/2、ws(WebSocket)、wss(WebSocket Secure,TLS 加密的 WebSocket)、SOCKS

“⚠️ 注:Charles 不支持 HTTP/3,但是大部分开启 HTTP/3 的网站都做了降级处理

若想抓取其他协议的报文,推荐用 Wireshark
Wireshark用的是RVI(Remote Virtual Interface)(iOS5以上才支持)。

更多关于Wireshark 请看这篇为文章: https://blog.csdn.net/z929118967/article/details/76914929

I 抓包配置

1.1 iOS侧的代理配置(默认不支持拦截SSL数据)

  • 把 iOS 的网络包转发到代理 IP 和代理端口的配置
在这里插入图片描述

确保Mac和iPhone在一个局域网,并在iPhone上设置代理信息:Mac端地址代理端口即可

五元组:源 IP 地址,源端口,传输层协议,目的 IP 地址和目的端口
  • 查看 Mac地址

在这里插入图片描述
或者使用ifconfig查看IP

    inet 192.168.1.107 netmask 0xffffff00 broadcast 192.168.1.255

Charles 的代理端口号可以从 Charles -> Proxy -> Proxy Setttings 进行查看和更改。端口默认是 8888
在这里插入图片描述

1.2 Mac侧的证书安装

需要信任证书,否则将提示: You may need to configure your browser or application to trust the Charles Root Certificate.

HTTPS = HTTP 协议 + TLS 协议

在 TCP 三次握手之上加入了四次 TLS 握手,TLS 握手过程中会校验加密用的公钥证书,所以想要拦截SSL请求,我们需要手动安装并信任 Charles 的证书,
  • Mac侧的证书安装
Charles -> Help -> SSL Proxying -> Install Charles Root Certificate

  • iPhone上的设置方法: Charles -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Derive,这时候会跳出一个弹窗,根据提示在手机端访问 chls.pro/ssl,下载安装 Charles CA 证书
或者直接访问 http://charlesproxy.com/charles.crt下载,如果无法通过浏览器下载CA 证书,可以选择先发证书到邮箱,再从系统邮箱选择安装

在这里插入图片描述

设置->通用 -> 选择对应的描述文件进行安装信任刚刚下载的证书。

1.3 iOS端信任证书的方法

  • iOS 信任证书
iOS10.3.1 新安装的证书需要手动选择信任证书。

解决方式:

设置->通用->关于本机->证书信任设置
  • 应用场景:iOS10.3.1 新安装的证书需要手动选择信任证书。

解决方案

II 解决Certificate Pinning导致的无法分析问题

在 HTTPS 请求时,服务端发给客户端的公钥证书必须和客户端内置的公钥证书一致才能请求成功。

(支付行业的产品都会采用这个基本的验证,具体请看这篇 文章https://kunnan.blog.csdn.net/article/details/77115940

方案1:把证书和私钥导入到 Charles

  • 解决方案1:把证书和私钥导入到 Charles 中,解决Certificate Pinning
Charles -> Proxy -> SSL Proxying Setting -> Root Certificate,然后导入 .pem 或 p12 文件
在这里插入图片描述
双向认证的配置
  • 方案2:如果没有公钥证书和随之配套的私钥,这个时候当然可以采取逆向的手段来绕过证书校验

方案2:借助逆向手段来绕过证书校验

更多相关信息请看这篇文章: https://kunnan.blog.csdn.net/article/details/77115940

pinning/disable.js: This hook attempts many ways to kill SSL pinning and certificate

III 预备知识

3.1 获取站点的证书【可选】

如果遇到app进行本地证书验证的时候,需要在iPhone上信任对应的站点证书

使用openssl命令来获取到服务器的公开二进制证书(以google为例):
openssl s_client -connect www.google.com:443 </dev/null 2>/dev/null | openssl x509 -outform DER > https.cer

3.2 pem转变格式为DER

证书有BASE64和DER两种编码,der二进制编码可以使用openssl进行转换。

  • 转变格式为DER
openssl x509 -outform der -in kncmpay.cer -out kncmpay.cer

3.3 Android不同版本对CA 证书权限的处理规则

Android 版本越高,HTTPS 报文越难抓

系统 CA 证书:基本拥有所有权限
用户 CA 证书:用户自行安装,权限很低

获得证书 ROOT 权限

1、直接 ROOT Android 手机,把 Charles 证书放到系统证书里,实现证书洗白
2、Android 7.0 以下:信任用户 CA 证书,可以简单的理解为我们安装的证书直接获得 ROOT 权限
3、修改Android的配置文件 res/xml/network_security_config.xml ,来控制网络安全:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates overridePins="true" src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates overridePins="true" src="system" />
            <certificates overridePins="true" src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>
release 包只信任 system 级别的证书,
debug 包同时信任 system 和 user 级别的证书

see also

目录
相关文章
|
3月前
|
Java Android开发
Rockchip系列之CAN APP测试应用实现(4)
Rockchip系列之CAN APP测试应用实现(4)
61 1
|
3月前
|
测试技术 UED Python
App自动化测试:高级控件交互技巧
Appium 的 Actions 类支持在移动应用自动化测试中模拟用户手势,如滑动、长按等,增强交互性测试。ActionChains 是 Selenium 的概念,用于网页交互,而 Actions 专注于移动端。在Python中,通过ActionChains和W3C Actions可以定义手势路径,例如在手势解锁场景中,先点击设置,然后定义触点移动路径执行滑动解锁,最后验证解锁后的元素状态。此功能对于确保应用在复杂交互下的稳定性至关重要。
89 5
|
3月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
189 3
|
4天前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
13 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
1月前
|
前端开发 开发者
移动端-------app开发02,了解apicloud功能和使用,真机测试
移动端-------app开发02,了解apicloud功能和使用,真机测试
|
3月前
|
安全 开发者 iOS开发
iOS16系统手机设置开启开发者模式才能安装ipa包
iOS16系统手机设置开启开发者模式才能安装ipa包
101 1
|
3月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
79 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
3月前
|
大数据 测试技术 数据库
ios app性能分析
ios app性能分析
32 2
|
3月前
|
移动开发
使用charles来抓取手机App的网络包
使用charles来抓取手机App的网络包
36 1
|
3月前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
44 0

热门文章

最新文章