2017年,关于ATS设置,我们应该如何处理没有HTTPS的局域网请求?
In 2017, how should we handle LAN requests without HTTPS in respect to ATS settings?
据我了解,2017 年苹果将拒绝所有在 Info.plist
中启用 Allow Arbitrary Loads
的应用程序:
另请参阅: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
澄清一下,Apple 将拒绝使用 ATS 例外的应用,以禁用 2016 年 12 月 31 日之后提交的应用的 ATS,除非有正当理由说明应用必须使用该例外。我们只是不知道 Apple 会接受什么理由。
所以不幸的是,在iOS 9 中没有很好的解决本地网络资源被ATS 阻塞的问题。据我所知,你有2 个选择。
继续支持iOS9,并增加全局ATS例外,希望你在12/31/2016之后提交你的app时,苹果能接受你的理由支持 iOS 9 并在禁用 ATS 的情况下访问本地网络资源。在 2017 年 1 月 1 日之前,很难知道 Apple 认为哪些类型的理由是合理的,但 Apple 明确表示将有一个流程来证明应用程序使用 ATS 例外。如果你走这条路,我会尝试在 1 月初对应用程序进行一个小的更新,ATS 异常仍然存在,看看你是否可以通过这个过程。
放弃对 iOS 9 的支持,删除一揽子 ATS 异常 (NSAllowArbitratyLoads
),并使用 NSAllowsLocalNetworking
异常来关闭 ATS 保护仅在本地网络流量。 iOS9 不支持此功能,因此您只需要将新应用设置为 iOS10。基本上,只有 NSAllowsLocalNetworking
plist 条目设置为 true 的 iOS9 设备上的本地流量将被 ATS 阻止。根据您的客户群,这可能是可行的。 iOS 9 位用户仍然可以在您的 iOS 10 版本发布之前获得该应用程序的最新版本。
编辑:
所以看起来 Apple 在 iOS 10 中使用了一些自定义行为来允许 iOS 10 上的应用程序更安全,同时允许在 iOS 9 中向后兼容。如果您在 info.plist 中包含 NSAllowsArbitraryLoads
和 NSAllowsLocalNetworking
,iOS9 将只识别 NSAllowsArbitraryLoads
条目,并允许所有流量(来自安全观点,但适用于您的本地网络流量)。在 iOS 10 中,使用 NSAllowsLocalNetworking
将导致 iOS 10 忽略 NSAllowsArbitraryLoads
条目,这意味着您的应用程序将确保对非本地连接强制执行 ATS,但是允许本地连接通过。显然,您应该在 iOS 9 和 10 上测试您的应用程序,但如果您仍然需要支持 iOS 9,那么从安全的角度来看,这将是理想的选择。请务必注意,您仍然需要向 Apple 提供理由,但鉴于 Apple 将此功能用于处理这种情况,我愿意打赌向后兼容性将是一个可接受的理由。
来自 Apple 的 documentation:
In iOS 10 and later, and macOS 10.12 and later, the value of this key
is ignored if any of the following keys are present in your app’s
Info.plist file:
NSAllowsArbitraryLoadsForMedia
NSAllowsArbitraryLoadsInWebContent
NSAllowsLocalNetworking
据我了解,2017 年苹果将拒绝所有在 Info.plist
中启用 Allow Arbitrary Loads
的应用程序:
另请参阅: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
澄清一下,Apple 将拒绝使用 ATS 例外的应用,以禁用 2016 年 12 月 31 日之后提交的应用的 ATS,除非有正当理由说明应用必须使用该例外。我们只是不知道 Apple 会接受什么理由。
所以不幸的是,在iOS 9 中没有很好的解决本地网络资源被ATS 阻塞的问题。据我所知,你有2 个选择。
继续支持iOS9,并增加全局ATS例外,希望你在12/31/2016之后提交你的app时,苹果能接受你的理由支持 iOS 9 并在禁用 ATS 的情况下访问本地网络资源。在 2017 年 1 月 1 日之前,很难知道 Apple 认为哪些类型的理由是合理的,但 Apple 明确表示将有一个流程来证明应用程序使用 ATS 例外。如果你走这条路,我会尝试在 1 月初对应用程序进行一个小的更新,ATS 异常仍然存在,看看你是否可以通过这个过程。
放弃对 iOS 9 的支持,删除一揽子 ATS 异常 (
NSAllowArbitratyLoads
),并使用NSAllowsLocalNetworking
异常来关闭 ATS 保护仅在本地网络流量。 iOS9 不支持此功能,因此您只需要将新应用设置为 iOS10。基本上,只有NSAllowsLocalNetworking
plist 条目设置为 true 的 iOS9 设备上的本地流量将被 ATS 阻止。根据您的客户群,这可能是可行的。 iOS 9 位用户仍然可以在您的 iOS 10 版本发布之前获得该应用程序的最新版本。
编辑:
所以看起来 Apple 在 iOS 10 中使用了一些自定义行为来允许 iOS 10 上的应用程序更安全,同时允许在 iOS 9 中向后兼容。如果您在 info.plist 中包含 NSAllowsArbitraryLoads
和 NSAllowsLocalNetworking
,iOS9 将只识别 NSAllowsArbitraryLoads
条目,并允许所有流量(来自安全观点,但适用于您的本地网络流量)。在 iOS 10 中,使用 NSAllowsLocalNetworking
将导致 iOS 10 忽略 NSAllowsArbitraryLoads
条目,这意味着您的应用程序将确保对非本地连接强制执行 ATS,但是允许本地连接通过。显然,您应该在 iOS 9 和 10 上测试您的应用程序,但如果您仍然需要支持 iOS 9,那么从安全的角度来看,这将是理想的选择。请务必注意,您仍然需要向 Apple 提供理由,但鉴于 Apple 将此功能用于处理这种情况,我愿意打赌向后兼容性将是一个可接受的理由。
来自 Apple 的 documentation:
In iOS 10 and later, and macOS 10.12 and later, the value of this key is ignored if any of the following keys are present in your app’s Info.plist file:
NSAllowsArbitraryLoadsForMedia NSAllowsArbitraryLoadsInWebContent NSAllowsLocalNetworking