在阅读Apple Docs和众多Apple Developer论坛帖子之后,我仍然不清楚你是否需要任何ATS豁免来对本地网络机器进行安全(TLS / HTTPS)呼叫(不合格的域名为:https://MyServer:9000 )。 this doc的一部分陈述如下:
远程和本地连接应用程序传输的ATS的可用性 安全性(ATS)仅适用于与公共主机名建立的连接。 系统不对以下连接提供ATS保护:
- 互联网协议(IP)地址
- 不合格的主机名
- 使用.local顶级域名(TLD)的本地主机
连接到 不合格的主机名或.local域,必须设置值 将NSAllowsLocalNetworking键设置为YES。
注意:虽然ATS没有连接到本地主机,但是Apple 强烈建议对任何本地使用传输层安全性(TLS) 连接,以及使用自签名证书 验证本地IP地址
因此,我是否需要添加NSAllowsLocalNetworking,以使已经符合ATS(前向保密,TLS 1.2等)安全连接到非限定主机名(专用本地服务器)?或者只有不安全本地电话需要NSAllowsLocalNetworking?
答案 0 :(得分:0)
NSAllowsLocalNetworking
密钥用于请求本地网络呼叫的ATS例外。如果您的本地服务器符合ATS,则不需要添加例外。这很简单,可以验证。只需在iOS 10设备上运行您的应用程序,您的Info.plist中没有例外。如果设备上的连接成功,则表示没有导致问题的ATS违规。如果它不起作用,您可能违反了ATS要求之一(尽管您似乎已经验证了ATS合规性的一些高级要求)。
如果确实出现故障,可以使用以下方法测试ATS合规性的URL:在Mac上使用nscurl --ats-diagnostics <url>
命令。您可以在this post中找到有关ATS的更多信息,以及如何使用/解释上面nscurl命令的结果。
请注意,iOS 10中添加了NSAllowsLocalNetworking
例外,因此将其包含在构建版本中并在iOS 9设备上运行将不会发生任何变化。如果您最终需要它,并且需要支持iOS 9,则需要在Info.plist中添加 NSAllowsLocalNetworking
和NSAllowsArbitraryLoads
。在iOS 10上,它只会禁用本地连接的ATS,但在iOS9设备上(不支持NSAllowsLocalNetworking
条目),ATS将全面禁用。