前言
Window环境以前一直Fiddler,充当作为正向代理,分析HTTP(s)请求都很方便,包括Hack请求头、内容信息等都较为方便,但无奈没有MAC版本;
Mac环境下的竞品工具Charles很久以前初次使用后,熟悉了Fiddler后,感觉Clarles功能不如Fiddler来的方便,比如Filddler支持脚本处理等;
Fiddler官方提供了一个MAC版本的支持,需要在mono框架下使用,又折腾了一个晚上…
1. Charles Proxy
上面都是相关背景说明,文章内容,现在针对CHarles Proxy
的内容方面进行介绍。
1.1. ssl证书的实现方案
1.1.1. 基于自签名CA证书
MAC或IOS下面可以通过Openssl设定自签名的CA证书,加入到受信任根证书,以及在CharlesProxy SSL Proxy中设定好自签名CA证书,就可以将CharlesProxy设为SSL的中间代理人进行SSL信息代理和分析了。
由于苹果的的安全措施,自签名的CA证书由于没有在IOS预制的受信任根证书中,iOS中可用的受信任根证书列表已预安装在iOS Trust Store,每个iOS Trust Store都包含三类证书(信任链,由受信任的根签名的其他证书;始终询问是否受信任证书;被阻止的证书;1),我们生成的CA证书也需要加入进去!
1.1.2. 基于默认的Clarles证书
上述步骤也可以基于官方解决方案,直接受信于SSL证书:2
1.2. 系统自签名CA证书
1.2.1. MAC下安装并授信自签名证书
- 自签名CA证书、受信、生成pkcs12格式证书:https://github.com/tkstorm/ss-cert/
- 将
cacert.pem
添加到MAC授信根证书中
1.2.2. 将生成的CA证书添加至MAC受信任的证书颁发机构
- 打开钥匙串访问
- 文件 => 导入项目 => 导入cacert.pem自签名根证书 => 输入登陆密码
- 双击证书 => 信任 => 使用此证书时,始终信任
1.2.3. IOS下安装并授信自签名证书
- 同MAC一样,已有了CA根证书相关信息
- 通过“隔空投递” cacert.pem给到ios,然后安装,安装后可以在:Setting»General»Profile下看到
- 在Certificate Trust Setting中开启根证书信任: Setting»General»About»Certificate Trust Setting)
1.2.4. Iphone上面证书
之前在MAC上面生成的证书,可以通过隔空投递在Iphone上面打开安装!
1.3. CharlesProxy代理配置SSL代理
Charles Proxy通过成为一名中间人来做到这一点。Charles不是让浏览器看到服务器的证书,而是动态地为服务器生成证书,并使用自己的根证书(CA证书)对其进行签名。Charles收到服务器的证书,而您的浏览器收到自签名的的证书。因此,您将看到一个安全警告,指示根权限不受信任。如果将自签名的CA证书添加到受信任的证书中,您将不再看到任何警告。
1.3.1. 将pkcs#12格式证书设定到CharlesProxy中
在密码学中,PKCS #12 定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的X.509 证书,或者打包信任链的全部项目。 一个 PKCS #12 文件通>常是被加密的,同时单独存在。其被称作"安全包裹"的内部存储容器通常同时也被加密及单独存在。
1.3.2. 在Charles配置受信CA证书
SSL Proxying,新增Host、端口,我这边直接配置了*
,所有都走代理:
1.4. 请求HTTPS接口分析
2. Charles除了本地正向代理以外的其他功能
2.1. 单一请求并发测试
Charles拥有基本的负载测试能力,为了负载测试,首先在Charles中启动一个新会话,并记录浏览网站的浏览器会话。
从树(或任何其他节点)中选择站点节点; 右键单击并选择“ 重复高级”。然后,您可以指定负载测试的一些特性,包括重复每个请求的次数以及并发级别。并发级别表示访问该站点的用户数量,以及迭代次数。选择在新会话中显示结果。
2.2. 支持Protobuf调试
Protobuf是协议缓冲区是Google的语言中立,平台中立,可扩展的机制,用于序列化结构化数据
当Content-Type 标头的MIME类型为application/x-protobuf 或 时,Charles确定HTTP请求或响应包含Protocol Buffers消息 application/x-google-protobuf。查看内容时,可以使用两个新的HTTP正文内容查看器, Protobuf文本查看器 和 Protobuf结构化查看器。
2.3. Charles连接反向代理
反向代理在本地端口上创建Web服务器,该服务器透明地代理对远程Web服务器的请求。
支持用户请求,通过Charles Proxy连接到反向代理服务器,反向代理的所有请求和响应都可以记录在Charles中。
Charles可以为HTTP或HTTPS目标创建反向代理。对于HTTP,目标端口可能是80,对于HTTPS,它将是443.当您创建HTTPS反向代理时,您必须使用HTTPS连接到它,例如。https://开头本地主机:60000/
2.4. 额外代理设定
在家里面如果你是通过Socket5代理上网的,在浏览器打开一个域名,数据流向Chrome>>Charles Proxy>>External Proxy Setting
2.5. 端口转发
类似于SSH的通道功能,支持将Sockts流量导出到Remote Host的指定端口。
3. 参考
- charlesproxy设置:https://www.charlesproxy.com/documentation/configuration/browser-and-system-configuration/
- 过期证书重新签发: https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal
- PK12格式证书: https://zh.wikipedia.org/wiki/PKCS_12
- Iphone上面证书设定: https://support.apple.com/en-nz/HT204477
- apple关于授信证书: https://support.apple.com/zh-cn/HT209144#alwaysask
- ss-cert: https://github.com/tkstorm/ss-cert
- Charles Proxy Tutorial for iOS: https://www.raywenderlich.com/641-charles-proxy-tutorial-for-ios