69

我想使用 Charles 代理工具测试来自 android 设备的 Https 调用。我需要查看调试应用程序的原始请求/响应内容。我通过在“代理设置”-> SSL 选项卡下添加主机和端口来配置 Charles。当我运行该应用程序时,所有 SSL 调用似乎都从 Charles 中迅速消失。有没有人知道如何解决这个问题。Charles 文档似乎没有关于 Android 设备的信息。

4

9 回答 9

94

对于安卓7

请参阅: 如何让 charles 代理与 Android 7 nougat 一起工作?

适用于Android7以下的Android版本

在您的计算机上,运行 Charles

  1. 打开代理设置:代理->代理设置,代理选项卡,勾选“启用透明HTTP代理”,记住“端口”。 在此处输入图像描述

  2. SSL 代理设置:代理 -> SSL 代理设置,SSL 代理选项卡,勾选“启用 SSL 代理”,并添加. 到地点: 在此处输入图像描述 在此处输入图像描述

  3. 打开访问控制设置:代理 -> 访问控制设置。添加您的本地子网以授权本地网络上的机器使用来自另一台机器/移动设备的代理。 在此处输入图像描述

在安卓手机中

  1. 配置您的手机:进入设置->无线和网络->WiFi->连接或修改您的网络,填写电脑IP地址和端口(8888): 在此处输入图像描述

  2. 获取查尔斯 SSL 证书。从您的移动浏览器访问此网址:http: //charlesproxy.com/getssl 在此处输入图像描述

  3. 在“命名证书”中输入您想要的任何内容

  4. 接受安全警告并安装证书。如果您安装成功,那么您可能会看到这样的内容:在您的手机中,设置 -> 安全 -> 受信任的凭据: 在此处输入图像描述

完毕。

然后你可以在你的手机上进行一些测试,加密后的 https 请求将显示在 Charles 中: 在此处输入图像描述

于 2015-08-11T15:13:50.463 回答
44

编辑 - 这个答案是针对早期版本的查尔斯。有关 v3.10.x 的正确步骤,请参阅下面的@semicircle21 答案——也比这种方法容易得多...... :-)

值得一提的是这里的分步说明。它们也应该同样适用于 iOS:

  1. 打开查尔斯
  2. 转到代理 > 代理设置 > SSL
  3. 勾选“启用 SSL 代理”</li>
  4. 选择“添加位置”并输入主机名和端口(如果需要)
  5. 单击确定并确保选中该选项
  6. 从这里下载 Charles 证书:Charles cert >
  7. 通过电子邮件将该文件发送给自己。
  8. 在您的设备上打开电子邮件并选择证书
  9. 在“命名证书”中输入您想要的任何内容
  10. 单击确定,您应该会收到一条消息,表明证书已安装

然后您应该能够在 Charles 中看到 SSL 文件。如果您想拦截和更改值,您可以使用非常棒的“Map Local”工具:

  1. 在查尔斯去工具>地图本地
  2. 选择“添加条目”
  3. 输入要替换的文件的值
  4. 在“本地路径”中选择您希望应用加载的文件
  5. 点击确定
  6. 确保已选择该条目,然后单击“确定”
  7. 运行你的应用
  8. 您应该在“注释”中看到您的文件加载而不是实时文件
于 2014-03-07T21:38:50.980 回答
27

感谢@bkurzius 的回答,此更新适用于 Charles 3.10+。(原因在这里

  1. 打开查尔斯
  2. 转到代理 > SSL 代理设置...
  3. 勾选“启用 SSL 代理”</li>
  4. 选择“添加位置”并输入主机名和端口(如果需要)
  5. 单击确定并确保选中该选项
  6. 转到 Help > SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser...,然后按照说明进行操作。(使用安卓浏览器下载并安装证书。)
  7. 在“命名证书”中输入您想要的任何内容
  8. 单击确定,您应该会收到一条消息,表明证书已安装
于 2015-07-08T09:16:15.123 回答
8

看这里:

http://jaanus.com/blog/2012/02/12/debugging-http-on-an-android-phone-or-tablet-with-charles-proxy-for-fun-and-profit/

您需要将 charles.crt 证书安装到您的设备上。

于 2013-07-25T13:57:09.203 回答
5

我浪费了 1 天的时间来寻找问题,我的系统没有要求连接“允许”或“拒绝”。我虽然这是由于一些证书问题。尝试了上面提到的所有方法,但都没有奏效。最后我发现“防火墙是真正的罪魁祸首”。如果防火墙设置为 ON,他们将不允许 charles 通过代理 IP 与您的笔记本电脑连接。把它们关掉,一切都会顺利进行。不确定这是否是相关的答案,但只是想分享。

于 2020-01-28T06:24:56.527 回答
4

最受好评的答案运行良好(有点旧但仍在运行),但我只想提一下,自从 Android N 以来,我们都可以配置您的应用程序以获得差异信任 SSL 证书(仅用于发布、调试等) ,包括 Charles SSL 代理证书(如果您下载 Charles 证书并将 .pem 文件放在原始文件夹中)。更多信息可以在这里找到:https ://developer.android.com/training/articles/security-config.html

此外,Charles 的官方文档也可用于设置:https ://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

希望这将有助于在您的应用项目中设置 Charles,而不是在每个 Android 设备上。

于 2017-04-28T16:06:50.130 回答
1

我想通了这个问题。这是因为 Charles 3.7 对 Android 设备有一些错误。我更新到 Charles 3.8 Beta 版本,似乎对我来说工作正常。

于 2013-07-25T15:43:35.573 回答
1

对于较新的模拟器,使用以下命令从命令行启动可能会有所帮助:

emulator -netdelay none -netspeed full -avd <emulator_name> -http-proxy http://<ip-address>:8888

确保您遵循上述@User9527 的建议以及其余设置

于 2017-02-22T22:44:07.397 回答
0

对我来说,问题是查尔斯告诉我在代理设置中路由到的 IP 地址不正确。为了解决这个问题,我最终进入ifconfig了终端,并在端口尝试不同的 IP 地址(列在旁边inet)以8888获取当前活动连接

于 2017-12-02T21:45:38.373 回答