应用程序传输安全(ATS)和本地已安全的连接

时间:2017-06-13 20:12:08

标签: ios security ios10 app-transport-security

在阅读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?

1 个答案:

答案 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中添加 NSAllowsLocalNetworkingNSAllowsArbitraryLoads。在iOS 10上,它只会禁用本地连接的ATS,但在iOS9设备上(不支持NSAllowsLocalNetworking条目),ATS将全面禁用。