如何在设备上访问本地开发环境以及使用Charles代理和SSL?

12

我需要在设备上访问我的本地开发环境(MAMP Pro)。对于不需要 SSL 的站点,我已经成功实现了这一点,但是对于需要 SSL 的站点,我无法让它正常工作。

我的本地开发机器和设备都连接在同一个 wifi 网络上。在设备的 wifi 设置中,我已将 HTTP 代理设置为手动,服务器为我的开发环境 IP,端口为默认的 8888(如果我将其更改为 8080,它仍然有效)。

我已经在 MAMP Pro 中设置了 local.site1.com 的虚拟主机条目。该 URL 现在在我的本地开发环境和设备上都可以使用。

如果我尝试访问我的 SSL 站点 https://local.site2.com,这在开发环境上可以工作,但设备会显示以下消息:

Safari cannot open the page.

错误信息为:"There was a problem communicating with the secure web proxy server (HTTPS)."

Charles Proxy 似乎是使用 hosts 文件中指定的域名访问设备上的本地开发环境的标准方式,但我愿意使用任何可行的解决方案。

4个回答

7
你尝试过刷新或重启它吗?你可能需要重新检查将HTTP代理设置为手动,并确保本地开发机器和你的设备连接同一个WiFi网络。还要确保你的IP地址正确且代理正在运行。 请注意,如果你对数据请求使用了SSL
-前往代理 -> 代理设置 -> SSL -> 勾选“启用SSL”并添加你的请求的主机和端口。
-你可能还想从代理下拉菜单中禁用桌面和Web代理,以便更好地隔离你的应用流量。
你可能希望关闭蜂窝数据,以确保所有流量都通过Wi-Fi/Charles Proxy运行。
然后启动Charles并在顶部窗口切换到“序列”选项卡,实时查看每个调用和状态,包括响应大小和持续时间。单击请求以在底部窗格中查看详细信息,包括:概述、请求、响应和摘要。
确保探索不同数据类型的选项。例如,如果你的响应是图像,你可以查看实际图像和尺寸。如果你的应用程序消耗JSON,你可以选择JSON Tree Navigator,或者通过右键单击顶部“序列”选项卡中的请求来“复制响应”。将结果粘贴到像http://www.uize.com/examples/json-prettifier.html这样的网站中,以获得易于阅读的输出。 在启动期间,请检查以下内容
1.你的应用程序是否正在进行合理数量的数据请求,以平衡启动时间和预取,以加速“下一页”?
2.是否有任何请求获取了不必要的数据?
3.响应时间是否由于服务器配置或性能不佳的后端而变高? 在应用程序使用期间,请检查以下内容
1.是否存在常见的导航路径,这些路径很慢,可以在启动时受益于预取?
2.实际上,数据是来自缓存还是发起新的数据请求?
3.是否发送任何跟踪数据(例如Omniture、Google Analytics或其他第三方服务),如果是,是否正确发送?是否由于编码错误而错误或重复地发出请求?
4.如果你提供视频,则是否选择了适当的编码/格式?(Charles可以减小速度以模拟无线电话连接。)图像是否适当地缩小到设备的大小?

4
如果使用Charles,您还需要安装其证书:
iOS 4及更高版本 在设备上,将HTTP代理设置为使用Charles,然后浏览到http://www.charlesproxy.com/getssl以安装证书。

我已经安装了证书,但Safari仍然无法打开页面。 - Evanss

2

Charles Proxy

要在SSL中使用Charles Proxy,您需要安装Charles Proxy根证书。这是因为Charles Proxy实际上充当了一个MITM,以便您可以查看应用程序和服务器之间生成的SSL流量(这在跟踪问题或想要知道生成多少流量时非常有用)。

请参见:http://www.charlesproxy.com/documentation/proxying/ssl-proxying/

http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/

安装ROOT CA后,您的应用程序和内置Safari浏览器应该能够访问该站点。

另一种选择

我过去使用的另一种方法是实际上使用dnsmasq,它是一个相当轻量级的DNS服务器,将读取系统本地的/etc/hosts文件,并在不在您的主机文件中时转发到resolv.conf中的nameserver。

您可以通过Macbook /笔记本电脑上的macports(Windows上的cygwin)安装dnsmasq,或者如果您运行的是*nix,则通常是一个标准的分发软件包。

一旦您运行了dnsmasq,那么您只需通过Settings / Wifi将您的设备指向您的dnsmasq服务器以进行名称解析。只要您的站点在/etc/hosts中,并且您的基于主机的防火墙没有阻止端口53(DNS),那么您应该没问题。

我发现自己大多数时间都在使用dnsmasq,但是当我试图真正跟踪我的应用程序使用了多少数据时(对我来说是一个特定的要求,因为该应用程序是一种需要每天保持低于3MB使用量的信息亭,以免我们收到巨额的手机账单)时,Charles Proxy非常有用。


1
肯定是因为你注入的证书不来自“可信任”的来源,所以OSX/iOS不喜欢它,直接终止了连接。
你可以使用Apple Configurator将你的证书定义为来自可信任的来源。 source 编辑
  1. 打开苹果配置器应用程序并创建一个新的配置文件(准备)。
  2. 在安装选项卡中禁用“更新iOS”,因为我们不想这样做。我们只想注入证书。
  3. 然后进入“安装”选项卡,在“设置”下选择证书。(由于我们无法在此mobileconf中包含.pem文件,因此必须将根证书转换为.cert文件,而且既然它已经在钥匙链应用程序中,只需将其导出到可以轻松找到它的地方作为.cert文件。
  4. 回到苹果配置器应用程序,选择刚刚导出的.cert根证书,并通过USB电缆将mobileconfig推送到您的手机/设备上。(您将被提示接受正在安装它,因为它是一个“不受信任”的根证书,之后您将按照创建者here所解释的步骤安装.pem证书到设备上。
  5. 一旦到达那里,您就可以像在网络设置中设置http代理一样设置代理,并查看所有TLS加密流量在iOS 8上流动。

这个好像不起作用,但我不确定是否有做错什么。使用Apple Configurator,我在设置下创建了一个新名称,将“更新iOS”设置为“从不更新设备”。在设置中,我添加了我的本地主机所使用的证书。回到设置中,我通过USB将配置文件安装到了我的设备上。然而,我无法在我的设备上看到任何变化,页面仍然无法加载。 - Evanss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接