如何在Xcode 6(iOS 8)模拟器上使用Charles Proxy?


Answers:


121

更新:Charles 3.9.3+具有内置功能来配置您的iOS模拟器(即安装Charles SSL证书)。可以在Charles应用程序的“帮助”菜单中找到它。(Help > SSL Proxying > Install Charles Root Certificate in iOS Simulators

以下内容适用于Charles 3.9.2:

Charles Proxy网站下载配置shell脚本。然后,将脚本替换为以下脚本,然后在Mac上运行它:

#/bin/bash
install() {
if [ -f "$SQLITEDBPATH" ]; then
cp -n "$SQLITEDBPATH" "$SQLITEDBPATH.charlesbackup"
sqlite3 "$SQLITEDBPATH" <<EOF
INSERT INTO "tsettings" VALUES(X'189B6E28D1635F3A8325E1E002180DBA2C02C241',X'3123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A',X'3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C21444F435459504520706C697374205055424C494320222D2F2F4170706C652F2F44544420504C49535420312E302F2F454E222022687474703A2F2F7777772E6170706C652E636F6D2F445444732F50726F70657274794C6973742D312E302E647464223E0A3C706C6973742076657273696F6E3D22312E30223E0A3C61727261792F3E0A3C2F706C6973743E0A',X'3082045E30820346A003020102020101300D06092A864886F70D01010505003081913123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A3020180F31383939313233313132303030305A170D3338303932343033313930355A3081913123302106035504030C1A436861726C65732050726F78792053534C2050726F7879696E6731243022060355040B0C1B687474703A2F2F636861726C657370726F78792E636F6D2F73736C3111300F060355040A0C08584B3732204C74643111300F06035504070C084175636B6C616E643111300F06035504080C084175636B6C616E64310B3009060355040613024E5A30820122300D06092A864886F70D01010105000382010F003082010A02820101008349587455EFB272E397A31D3B52D9B13115C93F320766D2D451117F45C40285506027079ED439CABB94D44F1AE136EB1E79BF77ABE43345AD1D436809CF9E035C439272F3CA917DCADD7FBD0E3929F1A345F0B89096130BBD116F8D3AB5655789B7B0831325BD22903F198DA6BDDA30C08DFD17CE9AB51C48555264307BCF789A2B6C48DF4ECAF3EA2C092EE737AD8F397900AC03303BFE2AE43549030A7866CB6FE9B04B9F6EC498B4E7369E99B45491BF093858A77C72F8ADC818E018D413265E39446BE514F78EB57A23AA88F630776F861A9163E04AD38EE8A5C9219D0FC23F6B9A6324455DEA6F4A6A251ECA1FA3D6288CB89FD12A2062A3A015A56F250203010001A381BC3081B9300F0603551D130101FF040530030101FF307706096086480186F842010D046A136853534C2050726F7879696E6720697320656E61626C656420696E20436861726C65732050726F78792E20506C6561736520766973697420687474703A2F2F636861726C657370726F78792E636F6D2F73736C20666F72206D6F726520696E666F726D6174696F6E2E300E0603551D0F0101FF040403020204301D0603551D0E04160414BB27F4CB2EB6DBB058101BBD803F38D208D76129300D06092A864886F70D010105050003820101000041F935F30B209E56360F7E3D9C30314A213323C47EDCEA1467600A50FFE4E8E39DFCA8C8D34463C34745FF04C870F1DF28BB772DB0CF1BCA677B70842C742BC6D5FB00559AD643C6BF2C95BD0B855A961D7D6A3EADA9C642E9A789474C4AD838C6F732D8D859548D30829DF7A32D098FE3F00147DAF08C0B37DD597184C1E27A61EA42050C73994E809013CB21E37BF84BF923BCEFEA6164FD28AB9058CCC48F1F486FC1C47EBD8A9C933F542401B11F36A003E47B141A41C7B326D18D023E11EDB445699AA44800254EA33F174FD5EB1CCCE6A09365751FF905988C06315B5575067BF65EC24CAD1A6A601846D1D2F51F1F420A2762990B044000619D1C84');
EOF
fi
}

for SQLITEDBPATH in ~/Library/Developer/CoreSimulator/Devices/*/data/Library/Keychains/TrustStore.sqlite3; do
    echo $SQLITEDBPATH
    install
done

echo "The Charles SSL CA Certificate has been installed for the iPhone Simulator"

注意事项:

  • 您必须在启动模拟器之前打开Charles。如果关闭Charles,网络请求将失败,直到您重新启动模拟器
  • 您每次在模拟器上“重置内容和设置...”时都需要执行此操作
  • 对于Xcode 5:如果您希望在Xcode 5及更早版本上设置Charles Proxy,则无需修改原始脚本。只需从Charles网站下载并按原样运行

4
重新启动模拟器后有效。
avdyushin 2014年

9
您回答似乎可以解决SSL请求问题。但主要问题可能是Charles无法处理来自iOS模拟器8.0 / Xcode6的任何请求。您知道如何解决它吗?
aelam

1
我认为脚本已移至此处:charlesproxy.com/documentation/faqs/…(并阅读源代码,看起来它已按照您的建议进行了更新)
Ian Dundas 2014年

1
我遵循了此规则,但在终端中看到错误-唯一约束失败:tsettings.sha1
Beta

1
仅供参考-我更新了此答案,以包括通过其“帮助”菜单而不是需要脚本来下载证书3.9.1并进行证书安装的说明。
编码人员2014年

35

我刚刚通过Xcode 7 / iOS9模拟器测试了Charles。如果您遇到麻烦,我只想添加一些指针:

  • 确保在“查尔斯的代理” |“代理”下选中“启用Mac OS代理”和“使用HTTP代理”。代理设置;如果不想每次启动Charles时都执行此步骤,请选择“在启动时启用Mac OS X代理”。
  • 如果在“系统偏好设置” |“设置”中设置了“自动代理配置”(和/或“自动代理发现”)。网络,您需要取消选中它,以免Charles的Web代理(HTTP)和Secure Web Proxy(HTTPS)无效。
  • 如果您的公司需要独立于Charles的代理服务器,则需要在Charles内手动复制设置,以免被Charles覆盖,并且您将无法访问Internet。启动Charles之前,请记下代理URL和端口号。在Charles的Proxy |设置下,转录这些Web代理安全Web代理设置。外部代理设置。
  • 启用S​​SL代理”,然后通过Charles'Proxy | SSL代理设置。
  • 安装在iPhone模拟器查尔斯根证书通过查尔斯的帮助” | SSL代理菜单。
  • 是的,在启动模拟器之前,请确保先设置并启动了Charles。
  • 最后,暂时在开发过程中禁用ATS,直到我们听到来自Apple的更多信息为止。

“最后,暂时在开发过程中禁用ATS,直到我们听到来自Apple的更多信息为止。” -发现,没有其他答案。
Mark Gibaud

谢谢!他们应该把它放在查尔斯的网站上!
鲁道夫·J

Charles从3.11.4版本开始支持App Transport Security(ATS)。
玛丽安·塞尔尼

1
+1表示取消选中“自动代理配置”。我在公司网络环境中有一个.pac文件,由于该原因,模拟器的流量可能不会出现在Charles中。
iplus26

“确保在“查尔斯的代理|代理设置”下选中“启用Mac OS代理”和“使用HTTP代理””, 这对我有帮助。谢谢!
S. Matsepura

17

根据查尔斯文件

iOS模拟器应使用系统代理设置。如果不是,请尝试退出并重新启动iOS Simulator。从Xcode 6开始,在运行iOS Simulator之前,要运行Charles并将其设置为Mac OS X系统代理似乎很重要。

在这里阅读

因此,只需退出模拟器,打开查尔斯,然后再次运行该应用程序即可。之后,您可以跟踪网络呼叫。

注意:如果您退出查尔斯,您的网络呼叫将失败。因此,您将需要退出模拟器并再次运行它,或者再次打开Charles。


1
我发现,如果您设置了“自动配置”代理URL,那么Charles Proxy将无法工作。似乎自动配置URL会覆盖所有手动代理设置。删除自动配置URL,并指定手动设置(以我的身份为凭据),使Charles可以重新配置设置,并且可以正常使用。.甚至无需重新启动iOS Simulator(7.1)。
肖恩·艾特肯2014年

12

另一种方法是浏览到设备上的证书http://charlesproxy.com/charles.crt

屏幕上将显示以下内容:

安装证书提示屏幕


我尝试了这种方法,但是在运行本地服务器时也无法加载安全站点。任何人都可以谈谈如何处理此问题吗?
Ganesh Pandhere 2014年

1
尝试使用Safari浏览以查看证书是否有问题。为此,请单击您网站的锁定符号。 Safari证书对话框窗口。我怀疑您使用的是自签名证书,并且需要在计算机上安装客户端证书。这可以通过Safari并选择“信任”->“始终允许”来实现。
user1307434 2014年

我必须这样做才能摆脱SSL握手错误。
Will Larche 2014年



2

看一下这个:

从Charles v3.9.3开始,“帮助”菜单中有一个项目“在iOS模拟器中安装Charles CA SSL证书”,它将自动在您的iOS模拟器中安装Charles的SSL CA证书。

另外,您可以更改代码,以便NSURLConnection接受任何SSL证书。请参阅堆栈溢出问题和答案: 如何使用NSURLConnection与SSL连接以获得不受信任的证书?

您可以在以下链接上进行检查: http : //www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/


2

“在iOS模拟器中安装Charles Root证书”在带有Xcode 7 / iOS 9模拟器的当前版本的CharlesProxy(3.11)中不起作用。

而是使用“在移动设备或远程浏览器上安装Charles Root证书...”选项。这将为您提供证书的URL。

如果您在模拟器的Safari中打开此网址,则可以选择安装证书。

然后,您仍然需要禁用应用程序传输安全性。我不明白为什么在安装证书后有必要这样做;我猜CharlesProxy没有使用足够大的密钥/签名。


如果没有其他要求,那么该证书是自签名的,并且可以肯定不会满足Apple的ATS要求。第一步是让查尔斯的证书由经批准的证书颁发机构签署,但撇开后勤工作,这将花费很多钱。域也必须面向公众。等等,如果一切可行的话,这绝非易事。
Hampden123

@ Hampden123据我所知,苹果的App Transport Security机制将允许自签名证书,只要它已作为受信任的证书正确安装到iOS设备中即可-因此,为什么我认为charlesproxy需要ATS出于其他原因禁用。我似乎目前无法访问Apple ATS文档以进行检查。
JosephH 2015年

如果您(或任何人)成功地在不禁用ATS的情况下向iOS 9设备提供了自签名证书,请告诉我您如何操作。TIA!
Hampden123

1

在Charles开始为我修复模拟器后,只需(重新)启动模拟器。


1

对于那些在Xcode 9 beta的模拟器上无法信任的连接而苦苦挣扎的人:

我不知道安装脚本是否有效,但是您可以通过Safari以与在物理设备上相同的方式安装查尔斯的证书。

所需的最后一步(当然是通过脚本或通过Safari安装证书之后):转到Simluator的设置->常规->关于->证书信任设置-> Charles Proxy自定义根...->启用💥


1

iOS模拟器的步骤。

  • 安装Charles- 下载
  • 查尔斯菜单->代理-> 启用Mac代理
  • Charles菜单->工具->代理->代理设置-> MacOS->选中所有复选框
  • 在iOS模拟器中安装Charles证书
  • Charles菜单->帮助-> SSL代理->在iOS模拟器中安装Charles Ceritificate
  • 在iOS模拟器中启用Charles证书
  • iOS模拟器设置->常规->关于->证书信任设置->开启
  • 如果没有出现流量,请在模拟器之前运行Charles

适用于iPhone / iPad的步骤。

  • 打开桌面Charles应用(Mac / Windows)
  • 转到Charles菜单->帮助-> SSL代理->在移动设备或远程浏览器上安装Charles Ceritificate->选择->弹出,并显示以下步骤`

    将您的设备配置为使用Charles作为其192.168.0.100:8888上的HTTP代理 ,然后浏览到chls.pro/ssl以下载并安装证书。

  • 转到iPhone设置-> Wifi->单击选定的wifi-> Http代理->配置代理->选择手动->将服务器设置为192.168.0.100,端口设置为8888->保存

  • 转到iPhone浏览器->加载chls.pro/ssl- >它将显示在弹出窗口的下方

    该网站正在尝试下载配置文件。您要允许吗?忽略按钮和允许按钮

  • 单击允许按钮->它将下载配置文件

  • 转到iPhone设置->常规->配置文件->下载的配置文件->选择Charles Proxy配置文件->安装
  • 转到iPhone设置->常规->关于->证书信任设置->启用-Charles Proxy CA证书
  • 现在我们可以在桌面Charles应用程序中跟踪iPhone应用程序调用

1
iOS模拟器设置->常规->关于->证书信任设置->开启我需要的内容,谢谢!
atalayasa

0

对我来说,这是行得通的。

我做的和我们在设备上做的一样。

  1. 打开Safari浏览chls.pro/ssl
  2. 接受并安装证书
  3. 转到设置/关于/信任证书并信任查尔斯证书。

我必须在3个模拟器实例上执行此操作,因为XCUI自动化测试可以旋转3。


0

前往Safari(模拟器)并访问URL后,它对我有用:

chls.pro/ssl 

在必须在iOS模拟器中安装Charles根证书之前(Charles:help / SSLproxying)

问候

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.