2017年,在ATS设置方面,我们应该如何处理没有HTTPS的LAN请求?

问题描述:

至于我在2017年认识苹果将拒绝在Info.plist启用Allow Arbitrary Loads所有的应用程序:2017年,在ATS设置方面,我们应该如何处理没有HTTPS的LAN请求?

ATS settings

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

我们的应用程序被控制在用户家中的智能设备。这就是说,我们不是通过HTTP与互联网进行通话,而是只与LAN设备通话。所有这些设备都不支持HTTPS。我们应该如何配置这些App Transport Security Settings而不让我们的应用被Apple拒绝?

编辑:Apple has delayed the SSL/ATS requirement to after 1/1/2017

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

因此,不幸的是,在iOS 9中ATS阻止本地网络资源并不是一个很好的解决方案。据我所知,您有两种选择。

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

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

编辑

所以它看起来像苹果采用iOS中10一些自定义的水煤浆允许iOS上的应用程序10要更安全,同时允许向后的iOS 9兼容性如果包括您的info.plist中的NSAllowsArbitraryLoadsNSAllowsLocalNetworking,iOS9只会识别NSAllowsArbitraryLoads条目,并允许所有流量(从安全角度来看并不是很好,但可用于本地网络流量)。在iOS 10中,使用NSAllowsLocalNetworking将导致iOS 10忽略NSAllowsArbitraryLoads条目,这意味着您的应用程序将确保ATS针对非本地连接实施,但允许本地连接通过。显然,你应该在iOS 9和10上测试你的应用程序,但是从安全角度来看,如果你仍然需要支持iOS 9,这将是理想的。重要的是要注意,你仍然需要向苹果提供理由,但是给定苹果公司把这个功能放在了处理这个确切的场景,我敢打赌,向后兼容将是一个公认的理由。

从苹果公司的documentation

在iOS系统10及更高版本,和MacOS 10.12及更高版本,如果任一下列键都出现在你的应用程序的 Info.plist文件中这一关键 的价值被忽略:

NSAllowsArbitraryLoadsForMedia 
NSAllowsArbitraryLoadsInWebContent 
NSAllowsLocalNetworking 
+0

感谢您最近的编辑 - 非常有帮助! –