在阅读了Apple Docs和许多Apple Developer论坛帖子后,我仍然不清楚您是否需要任何ATS豁免才能对本地网络计算机进行安全(TLS / HTTPS)调用(不合格的域,例如https://MyServer:9000)。 this doc的一部分陈述如下:
用于远程和本地连接应用程序传输的ATS的可用性
安全性(ATS)仅适用于与 public 主机名建立的连接。
系统不为以下方面的连接提供ATS保护:
连接到
不合格的主机名或.local域,必须设置
NSAllowsLocalNetworking键设置为YES。
注意:尽管不强制将ATS连接到本地主机,但是Apple
强烈建议对任何本地使用传输层安全性(TLS)
连接,以及使用自签名证书来
验证本地IP地址
那么,我是否需要添加NSAllowsLocalNetworking甚至使已经符合ATS的(转发保密性,TLS 1.2等)安全连接到不合格的主机名( private 本地服务器)?还是仅对和安全本地 call 才需要NSAllowsLocalNetworking?
最佳答案
NSAllowsLocalNetworking
密钥用于请求本地网络 call 的ATS异常。如果您的本地服务器符合ATS,则无需添加例外。验证非常简单。只需在Info.plist中的iOS 10设备上运行您的应用程序即可,无需例外。如果设备上的连接成功,则说明没有引起问题的违反ATS的行为。如果它不起作用,则可能违反了一项ATS要求(尽管您似乎已经验证了一些符合ATS要求的高级要求)。
如果确实失败,则可以使用以下方法测试URL是否符合ATS:在Mac上使用nscurl --ats-diagnostics <url>
命令。您通常可以在this post中找到有关ATS的更多信息,以及如何使用/解释nscurl命令的结果。
请注意,NSAllowsLocalNetworking
异常是在iOS 10中添加的,因此将其包含在内部版本中并在iOS 9设备上运行不会造成任何变化。如果最终需要它,并且需要支持iOS 9,则需要在Info.plist中将 NSAllowsLocalNetworking
和NSAllowsArbitraryLoads
都添加。在iOS 10上,它将仅禁用本地连接的ATS,但在iOS9设备(不支持NSAllowsLocalNetworking
条目)上,将全面禁用ATS。
关于ios - App Transport Security(ATS)和本地已经安全的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44530671/