成语大全网 - 经典成语 - 苹果文档翻译 iOS10 NSAppTransportSecurity

苹果文档翻译 iOS10 NSAppTransportSecurity

NSAppTransportSecurity (对应的值为字典类型)被用来定义 app 在进行网络请求时的安全设定:为现有安全机制设定特例,或者开启新的安全特性。

在苹果的开发平台上,有一种被称为 App Transport Security(ATS) 的网络安全机制,适用于 app 以及 app extension,默认开启。这项机制确保 app 在进行网络访问时,使用业界标准的,没有已知重大安全隐患的协议和加密方式,以此确保用户的隐私和数据完整性。从而培养用户对您的 app 的信任。

通过在 info.plist 中配置这个键,开发者可以自定义网络安全策略。例如:

对 NSAppTransportSecurity 的支持自 iOS9.0,OS X v10.11 开始,适用于 app 和 app extension。

自 iOS10.0,macOS 10.12 开始,增加了对下列子键的支持:

对于使用 iOS9.0, OS X v10.11 SDK 及以上的 app 来说,ATS(App Transport Security)默认开启, NSAllowsArbitraryLoads 是字典 NSAppTransportSecurity 的根键,默认值 NO 。

在启用 ATS 的情况下,所有的 HTTP 请求必须为 HTTPS( RFC 2818 ) 连接。任何不安全的 HTTP 请求都将失败。ATS 使用 TLS(Transport Layer Security)v1.2( RFC 5246 )。更多关于安全连接的信息,请查阅 HTTPS Server Trust Evaluation 。

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

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

主键包括:

阅读 表2 ,获取关于上述主键的详细信息。

所有的子键都属于 NSExceptionDomain 。向 Info.plist 中添加这一主键:

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

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

还参考 Certificate Transparency ,保证访问特定域名时的安全,详情见 Certificate Transparency 。

NSExceptionDomains 字典构成:

阅读 表3 ,获取关于 NSExceptionDomains 的进一步详细信息。

NSURLSession 以及所有与其相关的 API 都实现了对 ATS 的支持;如果您的 app 基于 iOS9.0 SDK 或 OS X v10.11 SDK 以上版本开发,ATS 自动开启。(较老的 NSURLConnection 同样会在上述 SDK 中开启对 ATS 的支持。)然而,在使用底层网络 API 或第三方网络库时,无法受到 ATS 的保护。

iOS9.0 或 OS X v10.11 以下版本,不支持 ATS, NSAppTransportSecurity 会被操作系统忽略。当 ATS 不可用时,系统将根据 RFC 2818 提供标准的 HTTPS 安全策略,对服务端进行验证。

当您的 app 运行在 iOS9.0 或者 OS X v10.11以下时,网络连接仍然可用,但 ATS 不起作用。

ATS 只针对 公***域名 起效。ATS 对已下连接无效:

为了连接非法域名或本地域名,需要将 NSAllowsLocalNetworking 设置为 YES。

在 ATS 完全开启的情况下,系统要求 app 的 HTTPS 连接必须满足以下要求:

上面的标准,未来可能会发生变化。但不会影响到 app 二进制包的兼容性。

暂略

能否自行改写服务器授信校验规则,取决于 ATS 是否针对某个域名开启。解释如下:

某些对 ATS 的配置会引发 App Store 的审核,开发者必须说明原因。这些键有:

以下是一些原因说明例子,供参考:

向 App Store 提交审核时,开发者应主动提供足够的信息,以便解释 app 无法使用安全连接的原因。

表2列出了 NSAppTransportSecurity 字典所有主键信息,通过定义这些主键,开发者可以配置 app 的网络行为。同 NSExceptionDomains 相关的子键信息请查看表3。

表2 ATS 字典主键

表3列举了用来针对某个域名进行网络安全配置所使用的键。

表3 针对某个域名进行网络安全配置的子键

下面介绍 NSAppTransportSecurity 的常见配置:

不影响整体 ATS 策略,只针对特定服务器进行不安全的网络请求——例如,从图片服务器请求图片——可在 Info.plist 中做如下配置:

重要: 使用上述配置之前,请注意其可能带来的潜在威胁。例如,通过 HTTP 连接从服务器获取媒体资源,可能带来如下风险:

不影响整体 ATS 策略,只针对特定服务器降低 HTTPS 的安全等级——包括使用较老版本的 TLS / SSL 协议,不支持正向保密——可在 Info.plist 中做如下配置:

假设正在开发一款浏览器应用,需要能够让用户访问任意 URL。这种情况下,开发者应该针对受控服务器使用安全连接,例如用于发布 app 更新的服务器。

为了能够让针对受控服务器的访问享受 ATS 保护,同时保证其他不安全访问可用,可在 Info.plist 中做如下配置:

暂略

暂略