如何在Xcode 7上使用Charles进行SSL连接?

6
我在新安装的Xcode 7上遇到了问题,即使通过Charles(Help> SSL Proxying>在iOS模拟器中安装Charles根证书)在iOS模拟器上安装了SSL证书,并明确允许在Charles中查询的服务器域名,任何尝试监听SSL流量的尝试都会导致连接失败。
Charles报告以下错误:
SSL握手:远程主机在握手期间关闭连接。您可能需要配置浏览器或应用程序以信任Charles根证书。请参见帮助菜单中的SSL代理。
Xcode控制台报告:
2015-09-23 11:29:44.173 Citifyd[8352:449043]注册错误。 错误:错误域= NSCocoaErrorDomain Code = 3010“REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION”UserInfo = {NSLocalizedDescription = REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION}2015-09-23 11:29:44.483 Citifyd[8352:449381] NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9802)2015-09-23 11:29:44.509 Citifyd[8352:449043] API ERRROR错误域= NSURLErrorDomain Code = -1200“发生SSL错误,无法建立与服务器的安全连接。”
在相同的设置下,Xcode 6运行良好-有人有什么想法吗?
1个回答

10

我根据这个主题解决了问题:https://forums.developer.apple.com/thread/4988

iOS 9(Xcode 7模拟器运行的版本)对于SSL传输有更严格的要求 - 来自上述主题中用户“诗人”的说法:

iOS 9 强制使用 HTTPS 的连接必须是 TLS 1.2,以避免最近的漏洞。在 iOS 8 中,甚至支持未加密的 HTTP 连接,因此旧版本的 TLS 也没有任何问题。作为解决方法,您可以将此代码段添加到 Info.plist 中:

<key>NSAppTransportSecurity</key>  
  <dict>  
  <key>NSAllowsArbitraryLoads</key>  
  <true/>  
</dict> 

这使得 Charles 在使用 iOS 9 模拟器时可以向您显示未加密的流量。在分发应用程序后,您可能希望禁用此功能。


1
这也是我找到的唯一解决方案。在构建AppStore之前记得删除它有点麻烦。 - Zoltán
1
这个会为所有域名打开HTTP,这是很危险的。你可以指定只允许你自己的开发服务器,并且你也可以指定TLS版本。详细答案在这里 - Ramaraj T
谢谢。一般来说,我维护iOS应用程序的解决方案是:当某些东西出现问题时,应用任何“这很危险”的建议来修复它,然后在有时间瞎搞时创建一个具有默认设置的新项目,并将旧代码带入其中并执行实际所需的操作。 - William Entriken

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