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 的审查,开发者必须说明原因。
- 设置为 YES,解除整个 app 的 ATS 限制;但是,通过
-
NSAllowsArbitraryLoadsInMedia
- 设置为 YES,解除通过 AV Foundation 框架访问媒体内容时的 ATS 限制;启用这个键,务必确保载入的媒体内容已经被加密,例如受
FairPlay
保护的文件,或者是安全的HLS
流媒,其中不包含敏感的个人信息。默认为 NO。
- 设置为 YES,解除通过 AV Foundation 框架访问媒体内容时的 ATS 限制;启用这个键,务必确保载入的媒体内容已经被加密,例如受
-
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。
- 设置为 YES,将验证域名服务器证书的
- NSIncludesSubdomains
- 代表想要配置的特定域名。可以添加多个域名(即添加多个这样的键),为它们统一配置 ATS 策略。这个键对应一个字典,包含以下子键:
原链接:http://www.jianshu.com/p/1ec3fa1ec00f