SSL 代理/Charles 和 Android 问题 [关闭]

Posted

技术标签:

【中文标题】SSL 代理/Charles 和 Android 问题 [关闭]【英文标题】:SSL Proxy/Charles and Android trouble [closed] 【发布时间】:2013-07-23 07:18:41 【问题描述】:

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

【问题讨论】:

如果您使用的是 Android 7.0,您可以在此链接中找到解决方案:enter link description here 【参考方案1】:

适用于 Android7

参考: How to get charles proxy work with Android 7 nougat?

适用于Android7以下的Android版本

从您的计算机上运行 Charles

    打开代理设置:代理->代理设置,代理选项卡,勾选“启用透明HTTP代理”,记住“端口”。

    SSL 代理设置:代理 -> SSL 代理设置,SSL 代理选项卡,勾选“启用 SSL 代理”,并将 . 添加到位置:

    打开访问控制设置:代理 -> 访问控制设置。添加您的本地子网以授权本地网络上的机器使用来自另一台机器/移动设备的代理。

在 Android 手机中

    配置您的手机:进入设置->无线和网络->WiFi->连接或修改您的网络,填写电脑IP地址和端口(8888):

    获取 Charles SSL 证书。从您的移动浏览器访问此网址: http://charlesproxy.com/getssl

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

    接受安全警告并安装证书。如果你安装成功,那么你可能会看到这样的东西: 在您的手机中,设置 -> 安全 -> 受信任的凭据:

完成。

然后你可以在你的手机上做一些测试,加密后的 https 请求会显示在 Charles 中:

【讨论】:

我使用的是 Charles 4.1.3,在帮助菜单中,它告诉我 Configure your device to use Charles as its HTTP proxy on 10.72.xx.xx:8888, then browse to chls.pro/ssl to download and install the certificate. 它适用于我的 iPhone,但不适用于 Android。在我的 Android 中,我访问旧网址 charlesproxy.com/getssl 有效。 在 Android 6.0 chrome 浏览器上,当我转到 charlesproxy.com/getssl 时,它显示了静态页面“Charles SSL CA 证书安装...”并且没有开始证书下载。请说明在这种情况下需要做什么? 我可以通过以下步骤解决上述问题 1. 删除现有的 charles 证书(损坏/过期/等) 2. 在设备中启用代理 3. 下载新证书(有趣的事情如下;在一个 android “charles-proxy..certificate.cer”被下载并在其他“charles-proxy..certificate.pem”被下载。4.从Chrome浏览器尝试打开.pem文件给出错误消息。5.现在直接转到文件位置通过文件管理器。 6. 点击它并将新名称命名为 Charles,它已安装,您可以在 charles 中看到流量 @vikramvi ,由于浏览器的安全设置,您可能无法下载证书文件。在这种情况下,请尝试使用其他浏览器,例如 firefox、.....等 确保您运行 Adb 命令 1) 查看使用 adb devices 的设备列表。 2) adb reverse tcp:8888 tcp:8888 如果之前没有安装 SSLCertificate。【参考方案2】:

编辑 - 此答案适用于早期版本的 Charles。有关 v3.10.x 的正确步骤,请参阅下面的@semicircle21 答案——也比这种方法容易得多...... :-)

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

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

然后您应该能够在 Charles 中看到 SSL 文件。如果你想截取和更改值,你可以使用“地图本地”工具,这真的很棒:

    在 Charles 中转到工具 > 地图本地 选择“添加条目” 输入要替换的文件的值 在“本地路径”中选择您希望应用加载的文件 点击确定 确保该条目已被选中并单击“确定” 运行您的应用 您应该会在“注释”中看到您的文件加载而不是实时文件

【讨论】:

第 4 步有点棘手。如果您想允许所有主机,那么就不要在那里添加任何东西!我正在尝试使用“*”和“*.*”并收到“证书文件不存在”错误。为我解决了将位置部分留空的问题。 这个答案似乎已经过时了。升级到 Charles 3.10 后,在安装过程中会为每台 pc/mac 生成 Charles cert root 文件,您可以从 Help > SSL Proxying > Save Charles Root ....导出它。 @semicircle21 - 你应该添加一个新的答案,以便它可以被投票 这不起作用了,您需要从 charles 帮助菜单中保存 .pem 并导入它而不是 .cert 下载链接 @User9527 在回答中提到了易于在 android 上安装证书,请遵循它而不是繁琐的电子邮件流程【参考方案3】:

感谢@bkurzius 的回答,此更新适用于 Charles 3.10+。 (原因是here)

    打开查尔斯 转到代理 > SSL 代理设置... 选中“启用 SSL 代理” 选择“添加位置”并输入主机名和端口(如果需要) 单击确定并确保选中该选项 转到帮助 > SSL 代理 > Install Charles Root Certificate on a Mobile Device or Remote Browser...,然后按照说明进行操作。 (使用 Android 浏览器下载并安装证书。) 在“为证书命名”中输入您想要的任何内容 单击“确定”,您应该会收到证书已安装的消息

【讨论】:

没有“启用 SSL 代理” @MarianPaździoch 抱歉,步骤 2 中的错误: 2. 转到代理 > SSL 代理设置... 注意:在“添加位置”步骤中,如果要为所有 HTTPS 流量启用 SSL 代理,可以输入 * 作为主机,输入 443 作为端口。【参考方案4】:

看这里:

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

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

【讨论】:

好的 - 如果证书不存在,您会看到此症状,因此提出此解决方案。 直到我将“*”添加到代理设置中允许的 SSL 主机列表之前,它对我不起作用 我担心链接现在坏了【参考方案5】:

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

【讨论】:

我在我的 ubuntu 机器上遇到了同样的问题。调试了很多天。最后你的解决方案奏效了。非常感谢。 @Abhishek 很高兴我的回答对社区中的某个人有所帮助 :)【参考方案6】:

评分最高的答案运行良好(有点旧但仍在运行),但我只想提一下,自从 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 设备上。

【讨论】:

第二个链接说 Charles 证书是“为您的 Charles 安装而唯一生成的”,因此它们不会在开发人员之间共享。不是这样吗? (即,我可以使用上述通用查尔斯证书吗?)@Stoycho Andreev【参考方案7】:

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

【讨论】:

我仍然看到 Charles 3.8b1 的这个问题 - 根据我的设置,在 Android 中(使用 Galaxy Note/4.1.2)似乎丢失了一些 HTTPS POST 请求 - 在 iPhone 4S 中一切都很好. 它适用于我的 Galaxy S3。我希望他们尽快为 Android 设备修复 Charles。 @otso 我遇到了同样的问题,一些 https 可以获取,一些未知错误。您的问题是如何解决的?【参考方案8】:

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

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

确保您在其余设置中也遵循上述@User9527 的建议

【讨论】:

【参考方案9】:

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

【讨论】:

以上是关于SSL 代理/Charles 和 Android 问题 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Charles代理SSL连接不会显示主机名,只显示ips

如何在 Windows 上使用 Charles Web Proxy 和最新的 Android Emulator 配置 SSL 证书?

Charles(Windows/Android)入门使用

配置charles代理拦截Android N设备上的流量

charles抓包显示此主机未开启ssl代理

charles SSL代理设置