Charles Proxy - MAC下的HTTP(S)分析工具配置和使用

前言

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下安装并授信自签名证书

  1. 自签名CA证书、受信、生成pkcs12格式证书:https://github.com/tkstorm/ss-cert/
  2. cacert.pem添加到MAC授信根证书中

1.2.2. 将生成的CA证书添加至MAC受信任的证书颁发机构

  1. 打开钥匙串访问
  2. 文件 => 导入项目 => 导入cacert.pem自签名根证书 => 输入登陆密码
  3. 双击证书 => 信任 => 使用此证书时,始终信任

1.2.3. IOS下安装并授信自签名证书

  1. 同MAC一样,已有了CA根证书相关信息
  2. 通过“隔空投递” cacert.pem给到ios,然后安装,安装后可以在:Setting»General»Profile下看到
  3. 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. 参考

  1. charlesproxy设置:https://www.charlesproxy.com/documentation/configuration/browser-and-system-configuration/
  2. 过期证书重新签发: https://serverfault.com/questions/306345/certification-authority-root-certificate-expiry-and-renewal
  3. PK12格式证书: https://zh.wikipedia.org/wiki/PKCS_12
  4. Iphone上面证书设定: https://support.apple.com/en-nz/HT204477
  5. apple关于授信证书: https://support.apple.com/zh-cn/HT209144#alwaysask
  6. ss-cert: https://github.com/tkstorm/ss-cert
  7. Charles Proxy Tutorial for iOS: https://www.raywenderlich.com/641-charles-proxy-tutorial-for-ios

  1. apple关于信任和证书:https://support.apple.com/zh-cn/HT209144 ↩︎

  2. charlesssl证书:https://www.charlesproxy.com/documentation/using-charles/ssl-certificates/ ↩︎