【问题标题】:How to get Charles working with Xcode 7 on SSL connections?如何让 Charles 在 SSL 连接上使用 Xcode 7?
【发布时间】:2015-12-21 04:59:05
【问题描述】:

我在新安装的 Xcode 7 中遇到问题,即使通过 Charles 在 iOS 模拟器上安装 SSL 证书(帮助 > SSL 代理 > 在 iOS 模拟器中安装 Charles 根证书),并明确允许我在 Charles 中查询的服务器,任何监听 SSL 流量的尝试都会导致连接失败。

Charles 报告以下错误:

SSLHandshake:握手期间远程主机关闭连接您可以 需要配置您的浏览器或应用程序以信任 Charles 根证书。请参阅“帮助”菜单中的 SSL 代理。

Xcode 控制台报告:

2015-09-23 11:29:44.173 Citifyd[8352:449043] 注册错误。 错误:错误域=NSCocoaErrorDomain 代码=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 中一切正常 - 有人有什么想法吗?

【问题讨论】:

    标签: ios ssl xcode7 charles-proxy


    【解决方案1】:

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

    iOS 9(Xcode 7 模拟器运行)对 SSL 传输有更严格的要求——来自上述线程中的用户“Poets”:

    iOS 9 强制使用 HTTPS 的连接为 TLS 1.2 以避免 最近的漏洞。在 iOS 8 中甚至是未加密的 HTTP 连接 受支持,因此旧版本的 TLS 不会产生任何问题 任何一个。作为一种解决方法,您可以将此代码 sn-p 添加到您的 Info.plist:

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

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

    【讨论】:

    • 这也是我找到的唯一解决方案。在为 AppStore 构建之前必须记住删除它有点痛苦。
    • 这会为所有危险的域打开 HTTP。您可以指定仅允许您自己的开发服务器,也可以指定 TLS 版本。详细答案here
    • 谢谢。一般来说,我维护 iOS 应用程序的解决方案是:当出现问题时,应用任何“这很危险”的建议来修复它,然后当我有时间使用默认设置创建一个新项目并将旧代码带入其中并做什么时确实需要
    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 2014-10-15
    • 2016-09-02
    • 2014-06-29
    • 1970-01-01
    • 2015-04-14
    • 2014-12-12
    相关资源
    最近更新 更多