【问题标题】:NSExceptionAllowsInsecureHTTPLoads not working for IP addressesNSExceptionAllowsInsecureHTTPLoads 不适用于 IP 地址
【发布时间】:2015-12-18 03:24:21
【问题描述】:

在 iOS 9 上排除 ATS 对我不起作用。

我有一个没有域名(只有 IP 地址)和 SSL 证书的测试服务器(所以它是 HTTP 而不是 HTTPS)

试过了:

<key>52.24.145.252</key>
<dict>
    <key>NSExceptionAllowsInsecureHTTPLoads</key>
    <true/>
    <key>NSIncludesSubdomains</key>
    <true/>
</dict>

但我仍然收到错误:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

我做错了什么?

【问题讨论】:

    标签: ios https


    【解决方案1】:

    您需要将NSAppTransportSecurity 字典添加到您的info.plist。然后加 NSAllowsArbitraryLoads 该字典的键并将布尔值设置为YES

    更新

    从 2017 年 1 月起,如果您使用上述方法退出 ATS,您需要在向 AppStore 提交应用时向 Apple 提供理由。

    App Transport Security REQUIRED January 2017

    【讨论】:

    • 这可能不是你想要的。通过这样做,您将允许任何域的所有 HTTP 请求不安全。已经说过,当我尝试指定特定域时,我遇到了与 Boaz 相同的问题。
    • @arjan 下面的回答是对这个问题的更好回答。这基本上删除了 ATS 功能,这是一件好事,同时他将您需要支持的特定域列入白名单。
    • @kpsharp:OP提到他没有任何域名,除了一些随机的IP地址
    • 在 2016 年 12 月 31 日之后,如果没有向 Apple 提供理由,这将不起作用。当有其他更安全的选项时,禁用所有应用程序传输安全性是多余的。
    • 截至今天 2017 年 3 月 20 日 NSAllowsArbitraryLoads 不起作用
    【解决方案2】:

    试试这个:

    或者,作为源代码:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>domain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    就像它在 iOS 9.1 中一样(假设您的域是正确的)。

    【讨论】:

    • 这不适用于 IP 地址。例外域需要域名,OP只有IP地址。
    • 感谢您的加入。我看到您在回答中提供了解决方法。
    • 是的,这不是一个很好的解决方案,但在 Apple 支持 IP 地址之前,有时它是唯一的解决方案。 Apple 的讨论板上有一个关于这个主题的长线程。
    • 这对我的问题很有用,因为我有一个域名,所以这与 boaz 不同。你有描述所有这些 plist 设置的网址吗?
    • 如果有人感兴趣,可以在 developer.apple.com/library/content/documentation/General/… 标题 ATS 配置基础下找到所有 ATS plist 设置
    【解决方案3】:

    实际上,真正的问题是在 iOS 9 中,ATS 异常不适用于 IP 地址。它仅适用于域名。完全关闭 ATS 是个坏主意,如果您希望在 2016 年 12 月 31 日之后提交到​​应用商店,您需要证明该决定是正确的。

    不幸的是,没有一个很好的解决方案来尝试为您尝试连接的服务器获取域名。

    其他人已经成功使用 xip.io 服务将本地 IP 地址“转换”为域名。因此,您可以将 xip.io 添加到 Exception 域,将 NSIncludesSubdomains 的子值设置为 true。然后,当您连接到您的域时,您将连接到 52.24.145.252.xip.io,而不是连接到 52.24.145.252

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 1970-01-01
      • 2011-10-03
      • 2016-09-07
      • 1970-01-01
      • 2022-07-11
      • 2014-08-21
      • 2020-05-22
      • 2014-10-08
      相关资源
      最近更新 更多