2017年,我们应该如何在没有HTTPS的情况下处理有关ATS设置的LAN请求?

时间:2016-12-12 13:25:02

标签: ios http https app-transport-security

据我所知,2017年Apple将拒绝Allow Arbitrary Loads中启用Info.plist的所有应用:

ATS settings

另请参阅:https://nabla-c0d3.github.io/blog/2016/08/14/ats-enforced-2017/

我们的应用程序正在控制用户家中的智能设备。这就是说,我们不是通过HTTP与互联网交谈,也不是局域网设备。所有这些设备都不支持HTTPS。如果Apple没有拒绝我们的应用程序,我们应该如何配置这些App Transport Security Settings

修改: Apple has delayed the SSL/ATS requirement to after 1/1/2017

1 个答案:

答案 0 :(得分:2)

为了澄清,Apple将拒绝使用ATS例外的应用程序禁用2016年12月31日之后提交的应用的ATS,除非有正当理由说明应用必须使用该例外。我们还不知道Apple会接受什么原因。

所以遗憾的是,iOS 9中的ATS阻止本地网络资源没有很好的解决方案。据我所见,您有两种选择。

  1. 继续支持iOS 9,并添加全球ATS例外,并希望在2016年12月31日之后提交您的应用时,Apple会接受您支持iOS 9和访问本地网络的理由禁用ATS的资源。直到2017年1月1日,很难知道Apple会认为哪种理由合理,但Apple明确表示会有一个程序来证明应用程序使用ATS例外。如果你走这条路线,我会尝试在1月初推出一个小的更新到ATS例外,看看你是否可以通过这个过程。

  2. 删除对iOS 9的支持,删除一揽子ATS例外(NSAllowArbitratyLoads),并使用NSAllowsLocalNetworking例外来关闭仅在本地网络流量上的ATS保护。 iOS9不支持此功能,因此您需要将新应用仅限iOS 10。基本上,只有NSAllowsLocalNetworking plist条目设置为true的iOS9设备上的本地流量将被ATS阻止。根据您的客户群,这可能是可能的。在iOS 10发布之前,iOS 9用户仍然可以获得该应用的最新版本。

  3. 修改

    所以看起来Apple正在iOS 10中使用一些自定义行为来允许iOS 10上的应用程序更安全,同时允许iOS 9中的向后兼容性。如果同时包含NSAllowsArbitraryLoads和{{1在您的info.plist中,iOS9将只识别NSAllowsLocalNetworking条目,并允许所有流量(从安全角度来看不是很好,但对本地网络流量有效)。在iOS 10中,使用NSAllowsArbitraryLoads将导致iOS 10忽略NSAllowsLocalNetworking条目,这意味着您的应用将确保对非本地连接强制执行A​​TS,但允许本地连接通过。显然,你应该在iOS 9和10上测试你的应用程序,但如果你仍然需要支持iOS 9,从安全的角度来看这将是理想的。重要的是要注意你仍然需要为Apple提供理由,但是给出了Apple将这个功能用于处理这个确切的场景,我愿意打赌,向后兼容性将是一个公认的理由。

    来自Apple的documentation

      

    在iOS 10及更高版本中,以及macOS 10.12及更高版本,此键的值   如果您的应用中存在以下任何键,则会被忽略   Info.plist文件:

    NSAllowsArbitraryLoads