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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 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
    ```bash
    inet 192.168.1.107 netmask 0xffffff00 broadcast 192.168.1.255

Charles 的代理端口号可以从` Charles -> Proxy -> Proxy Setttings `进行查看和更改。端口默认是 8888
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201229161331713.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

## 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 `


![](https://ucc.alicdn.com/images/user-upload-01/20201229164321739.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

- iPhone上的设置方法:` Charles -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Derive,这时候会跳出一个弹窗,根据提示在手机端访问 chls.pro/ssl,下载安装 Charles CA 证书`

>或者直接访问


![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20181210174012850.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

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


## 1.3  iOS端信任证书的方法


- iOS 信任证书

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

解决方式:

设置->通用->关于本机->证书信任设置


- 应用场景:iOS10.3.1 新安装的证书需要手动选择信任证书。




![解决方案](https://ucc.alicdn.com/images/user-upload-01/20181210173751815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)





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


在 HTTPS 请求时,服务端发给客户端的公钥证书必须和客户端内置的公钥证书一致才能请求成功。
>(支付行业的产品都会采用这个基本的验证,具体请看这篇[文章](https://kunnan.blog.csdn.net/article/details/77115940):https://kunnan.blog.csdn.net/article/details/77115940)

##  方案1:把证书和私钥导入到 Charles
- 解决方案1:把证书和私钥导入到 Charles 中,解决Certificate Pinning
>`Charles -> Proxy -> SSL Proxying Setting -> Root Certificate,然后导入 .pem 或 p12 文件`
>![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201230141529616.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)
双向认证的配置
![](https://ucc.alicdn.com/images/user-upload-01/20201230141954459.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwMTg5Nzk=,size_16,color_FFFFFF,t_70)

- 方案2:如果没有公钥证书和随之配套的私钥,这个时候当然可以采取逆向的手段来绕过证书校验

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

- [ios-ssl-kill-switch tweak](https://github.com/zhangkn/ios-ssl-kill-switch):https://github.com/zhangkn/ios-ssl-kill-switch
>更多相关信息请看这篇文章:https://kunnan.blog.csdn.net/article/details/77115940
- [ssl-kill-switch2:Blackbox tool to disable SSL certificate validation - including certificate pinning - within iOS and OS X Apps](https://github.com/nabla-c0d3/ssl-kill-switch2)
- [objection/hooks/ios](https://github.com/sensepost/objection/tree/master/objection/hooks/ios)

[pinning/disable.js: This hook attempts many ways to kill SSL pinning and certificate](https://github.com/sensepost/objection/blob/master/objection/hooks/ios/pinning/disable.js)

# III 预备知识
## 3.1 获取站点的证书【可选】

 如果遇到[app进行本地证书验证](https://kunnan.blog.csdn.net/article/details/77115940)的时候,需要在iPhone上信任对应的站点证书

>使用openssl命令来获取到服务器的公开二进制证书(以google为例):

```bash
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
<?xml version="1.0" encoding="utf-8"?>













```

release 包只信任 system 级别的证书,
debug 包同时信任 system 和 user 级别的证书

see also

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
88 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
21天前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
28天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
3月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
360 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
【Azure App Service】同一个App Service下创建多个测试站点的方式
【Azure App Service】同一个App Service下创建多个测试站点的方式
|
4月前
|
网络协议 安全 前端开发
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
【应用服务 App Service】Azure 应用服务测试网络访问其他域名及请求超时限制(4分钟 ≈ 230秒)
|
4月前
|
测试技术 数据安全/隐私保护 iOS开发
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
iOS自动化测试方案的第四部分,涵盖了基础环境准备、iPhone虚拟机设置、MacOS虚拟机与iPhone真机的连接,以及扩展问题和代码示例,确保读者能够顺利完成环境搭建并进行iOS自动化测试。
382 0
iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境
|
4月前
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
212 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
4月前
|
测试技术 开发工具 虚拟化
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程
这篇文章提供了一份保姆级的教程,指导如何在MacOS虚拟机上安装Xcode,包括环境准备、基础软件安装以及USB扩展插件的使用,以实现iOS自动化测试方案的第一步。
208 0
iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程