【问题标题】:App Transport Security and IP addresses in iOS9iOS9 中的应用传输安全和 IP 地址
【发布时间】:2015-09-03 10:00:15
【问题描述】:

我使用在我的开发盒上运行的本地服务器开发我的 iOS 应用程序。在设备上进行测试时,我通过 IP 地址直接连接,该地址通过 HTTP 而不是 HTTPS(因此在开发过程中我不必处理自签名证书,无论如何设备都不喜欢)。

我认为这就足够了:

但是,如果不添加 NSAllowsArbitraryLoads = YES,也就是这样:

现在,我必须记住在滚动生产构建时删除它,而不是在开发过程中...arg。 NSExceptionDomains 是否应该与 IP 地址一起使用,如果不是,如果不启用 NSAllowsArbitraryLoads,我还能做些什么吗?

【问题讨论】:

    标签: ios9


    【解决方案1】:

    如果您的目标是 iOS 10+,只需设置 NSAllowsLocalNetworking 标志。

    【讨论】:

      【解决方案2】:

      正如@PanxShaz 所说,您不能输入硬编码的 IP 地址,但您可以使用一种简单的解决方法:

      1. 使用sudo 打开您的/etc/hosts 文件并为您的IP 地址添加一个新的本地域名。示例:

        192.168.99.100 docker-host.localhost

      2. 然后刷新你的 DNS:

        dscacheutil -flushcache

      3. 最后在您的应用传输安全异常中使用这个新的本地域。

      【讨论】:

      • 如果没有越狱,这在 iOS 上是不可能的。
      • @Avi 是的,这是可能的,因为这实际上是在你的 mac 上完成的。此处的目的是在开发时提供一种解决方法。
      • 除非你的 iOS 设备使用你的 mac 作为 DNS,否则它不会工作。也许在模拟器上。
      【解决方案3】:

      如果不启用NSAllowsArbitraryLoads,我还能做些什么吗?

      一种解决方法是使用xip.io,如this Apple Developer Forums thread 中的QJeffR 所述(由his comment 中的David L 分享):

      对(例如)10.0.1.8.xip.io 的 DNS 调用将解析为 10.0.1.8,从而允许使用域而不是 NSExceptionDomains 键的 IP 地址。

      【讨论】:

      • 这适用于那些需要(出于各种原因)连接到 IP 地址而不是域名或连接到 LAN IP 地址的用户。这也适用于 LAN 地址,但 iOS 必须有 Internet 连接才能访问 xip.io 服务。然后,您只需要在应用传输安全设置中允许“xip.io”和子域。
      • 这不只是通过未知的 xip.io 服务器路由所有不安全的流量吗?
      • DNS 调用不会路由流量,它们只是将域名与 IP 地址“映射”。
      【解决方案4】:

      硬编码的 IP 地址在 iOS9 中不起作用。我也面临同样的问题。 尝试了可用解决方案的所有排列和组合。 最后,必须使用正确的域名。

      所以,不。在 iOS9 中,您无法摆脱硬编码的 IP 地址。

      【讨论】:

      猜你喜欢
      • 2016-02-13
      • 2015-12-25
      • 2016-01-25
      • 1970-01-01
      • 2015-11-29
      • 2014-11-12
      • 2016-03-23
      • 2017-06-12
      相关资源
      最近更新 更多