【问题标题】:Managing dev environments when developing for iOS 9 with SSL certificate使用 SSL 证书为 iOS 9 开发时管理开发环境
【发布时间】:2016-03-16 01:14:50
【问题描述】:

在 iOS 9 中,Apple 是 mandating the use of HTTPS。虽然这一切都很好且安全,但它迫使我将所有开发/测试服务器都转换为 HTTPS。我正在为 Android 和 iOS 开发。

我已经尝试过/看过的东西:

  1. 运行 iOS 8 - 不是长期解决方案
  2. 自签名服务器 - 需要向两个平台添加代码。
  3. 添加根证书 - 可能是要走的路,但就花费的时间而言代价高昂。

我想知道其他人是如何处理这个问题的。理想情况下,我想要一个基于 3(或不基于 1 和 2)的解决方案,它适用于模拟器/模拟器,并且不需要在各种设备上跳过箍和不断修补根证书。

我还将采用仅适用于 iOS 的解决方案(例如 #ifdef),因为 Android 可以继续使用 HTTP。

================================================ ======================= 更新:12 月 20 日

  1. 我的服务器只有 IP 地址。没有域名。
  2. 使用 plist 设置是一个选项。但是,答案必须具体而完整。我希望看到类似于删除“发布”构建的 plist 设置的脚本。 我不是安全人员,但我怀疑将列入白名单的 IP 地址留给攻击者使用是个坏主意。

【问题讨论】:

    标签: android ios ssl ios-simulator ios9


    【解决方案1】:

    您可以使用免费的 DNS 提供商为您的开发服务器轻松添加域名。我使用http://freedns.afraid.org/,他们有一些共享域名,您可以在其中为您需要的 IP 添加名称。我有时只是为了内部服务器这样做,以便更容易记住它们的位置!

    至于 plist;当您将这样的名称列入白名单时,您所做的就是告诉电话应用程序它可以使用 HTTP 与该服务器通信。如果您#ifdef DEBUG 让您的应用能够与这些端点通信,那么您应该编译出最终用户切换到它的能力!

    如果您仍然对此感到担忧并希望有一个构建步骤来消除豁免,那么 PlistBuddy 就是您的朋友。您可以使用以下命令行删除豁免。

    /usr/libexec/PlistBuddy -c "Delete :NSAppTransportSecurity:NSExceptionDomains:my.devserver.com" Info.plist
    

    【讨论】:

    • 你,我的朋友,公平公正地赢得了这个赏金。 PlistBuddy 正是我想要的。我从没想过要寻找它,它解决了 plist 条目使其投入生产的问题。谢谢。
    • 甜蜜!很高兴它有帮助!
    【解决方案2】:

    如果您想在 iOS9 中使用 HTTP/HTTPS,请将此属性放在您的 info.plist 中。

    【讨论】:

    • 成为西部最快的枪是不够的。有一些关于堆栈溢出的好答案应该看起来如何的指南 (stackoverflow.com/help/how-to-answer)。无论如何,这可能会不加选择地禁用 HTTPS 强制执行,这不是我想要的。
    【解决方案3】:

    在iOS9中使用NSURLSession、NSURLConnection时默认开启App Transport Security 您可以使用 NSExceptionDomains 为 Info.plist 中的某些 URL 选择退出 ATS。在 NSExceptionDomains 字典中,您可以明确定义需要 ATS 例外的 URL。您可以使用的例外是:

    NSIncludesSubdomains
    NSExceptionAllowsInsecureHTTPLoads
    NSExceptionRequiresForwardSecrecy
    NSExceptionMinimumTLSVersion
    NSThirdPartyExceptionAllowsInsecureHTTPLoads
    NSThirdPartyExceptionMinimumTLSVersion
    NSThirdPartyExceptionRequiresForwardSecrecy
    

    这些键中的每一个都允许您在无法支持的域上精细地禁用 ATS 或特定 ATS 选项。 你可以在这里参考这个问题的答案,

    How do I load an HTTP URL with App Transport Security enabled in iOS 9?

    Transport security has blocked a cleartext HTTP

    【讨论】:

    • 感谢您的回答。实际上,我确实看到了上述一些例外情况。我正在寻找的是一个具体的答案,而不是文档的通用链接。如何编写一个适用于 HTTP 中的 n 个服务器列表(仅限 IP)的应用程序,但在为发布而编译时,将删除所有提及这些设置的内容。有一个简单的布尔值太危险了。如果我忘记在发布前删除它会怎样?请注意,我根据您的解决方案改进了我的请求。
    • 虽然这不是我想要的,但我很感激我的努力,因为它确实帮助了我,并且可能会帮助其他人。因此,我对你的答案投了赞成票。谢谢。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 2016-12-21
    • 2014-08-06
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多