在阅读了Apple Docs和许多Apple Developer论坛帖子后,我仍然不清楚您是否需要任何ATS豁免才能对本地网络计算机进行安全(TLS / HTTPS)调用(不合格的域,例如https://MyServer:9000)。 this doc的一部分陈述如下:

用于远程和本地连接应用程序传输的ATS的可用性
安全性(ATS)仅适用于与 public 主机名建立的连接。
系统不为以下方面的连接提供ATS保护:


  • Internet协议(IP)地址
  • 不合格的主机名
  • 使用.local顶级域(TLD)的本地主机


  • 连接到
    不合格的主机名或.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中将 NSAllowsLocalNetworkingNSAllowsArbitraryLoads都添加。在iOS 10上,它将仅禁用本地连接的ATS,但在iOS9设备(不支持NSAllowsLocalNetworking条目)上,将全面禁用ATS。

    关于ios - App Transport Security(ATS)和本地已经安全的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44530671/

    10-09 02:41