App Transport Security相关说明

App Transport Security(ATS)的网络安全机制,适用于 app 以及 app extension,默认开启,即iOS9.0以后创建APP项目默认使用HTTPS请求。

NSAllowsArbitraryLoads是字典NSAppTransportSecurity的根键,默认值NO

一、如果APP 仍需使用http请求,解决方案是在Info.plist文件中将NSAllowsArbitraryLoads修改为YES。

二、如APP使用http访问,而需要访问某第三方时需要采用HTTPS请求或者反之,均可在NSAllowsArbitraryLoads->NSExceptionDomains里单独对某域名进行设置

三、ATS Configuration Basics / ATS 配置基础知识

在启用 ATS 的情况下,所有的 HTTP 请求必须为 HTTPS连接。任何不安全的 HTTP 请求都将失败。ATS 使用 TLS(Transport Layer Security)v1.2。

字典NSAppTransportSecurity的总体结构,所有键都是非必填项:

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean //默认NO,开启ATS
    NSAllowsArbitraryLoadsInMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
            NSRequiresCertificateTransparency : Boolean
        }
    }
}

键可以分为两类:主键,这些键用来定义 app 的总体 ATS 策略(红色部分);子键,即NSExceptionDomains下面的键,使用这些键针对某个域名单独配置。

主键包括:

  • NSAllowsArbitraryLoads

    • 设置为 YES,解除整个 app 的 ATS 限制;但是,通过NSExceptionDomains进行的配置依然有效。默认值为 NO。
    • 注意:设置为 YES,会引发 App Stroe 的审查,开发者必须说明原因。
  • NSAllowsArbitraryLoadsInMedia

    • 设置为 YES,解除通过 AV Foundation 框架访问媒体内容时的 ATS 限制;启用这个键,务必确保载入的媒体内容已经被加密,例如受FairPlay保护的文件,或者是安全的HLS流媒,其中不包含敏感的个人信息。默认为 NO。
  • NSAllowsArbitraryLoadsInWebContent

    • 设置为 YES,解除通过 web view 发出的网络请求的 ATS 限制。启用这个键,可以使 app 访问任意网页内容,但不影响 app 的总体 ATS 策略。此键值默认为 NO。
  • NSAllowsLocalNetworking

    • 设置为 YES,使得 app 可以载入任意本地资源,但不影响 app 的总体 ATS 策略。默认为 NO。
  • NSExceptionDomains

    • 为一个或多个域名单独配置 ATS。
    • 被单独配置的域名,默认受到完全的 ATS 限制,不管NSAllowsArbitraryLoads的值如何;需要通过子键,进一步配置。

子键 属于NSExceptionDomains

      创建字典,针对一个或多个域名,以便进行 ATS 配置。

  这意味着之前使用主键所做的设置,对于这个域名来说,已经无效。

例如,及时之前设置NSAllowsArbitraryLoadsInMedia为 YES,然而NSExceptionDomain所代表的域名依然不能访问不安全的媒体内容。

基于这样的设定,可以针对域名进行 ATS 配置,增加或减少安全措施。

NSExceptionDomains字典构成:

  • <域名字符串>
    • 代表想要配置的特定域名。可以添加多个域名(即添加多个这样的键),为它们统一配置 ATS 策略。这个键对应一个字典,包含以下子键:
      • NSIncludesSubdomains
        • 设置为 YES,当前域名的 ATS 策略适用于其所有子域名。默认为 NO。
      • NSExceptionAllowsInsecureHTTPLoads
        • 设置为 YES,可以同时通过 HTTP 和 HTTPS 访问当前域名。默认为 NO。
        • 注意,配置这个键值,将引发 App Store 的审查,开发者必须说明原因。
      • NSExceptionMinimumTLSVersion
        • 指定 TLS 的最低版本,因此可以使用版本较低,有安全漏洞的 TLS 协议。
        • 注意,配置这个键值,将引发 App Store 的审查,开发者必须说明原因。
      • NSExceptionRequiresForwardSecrecy
        • 设置为 NO,允许针对当前域名使用不支持正向保密的 TLS 加密算法。默认为 YES。
      • NSRequiresCertificateTransparency
        • 设置为 YES,将验证域名服务器证书的Certificate Transparency时间戳 。默认为 NO。

原链接:http://www.jianshu.com/p/1ec3fa1ec00f

posted @ 2017-11-24 14:22  锦夏ing  阅读(5385)  评论(0编辑  收藏  举报