iOS 9:ATS

苹果公司对安全上的重视无可厚非,今年的WWDC大会上,Apple明确表示以身作则,通过一个新特性来提高系统的安全性,他就是App Transport Security。

1.什么是App Transport Security。

App Transport Security,简称ATS,是iOS9的一个新特性。尽管Apple没有提到watchOS,我相信App Transport Security 一定也适用于watchOS2.App Transport Security 的目标是提高Apple 操作系统的安全性以及在此操作系统上运行的任何应用的安全性。

基于HTTP传输数据的网络请求都是明文请求,不言而喻,这将会引起巨大的安全风险,苹果的宗旨就是每个开发者必须保证客户的数据是安全的,及时那些数据对于开发者来说并不是很重要。

App TransPort Security 通过强力推行一系列最好的安全实际操作来积极促进安全性,最重要的就是网络请求必须在一个安全的链接上。开启App TransPort Security时代后,网络传输自动通过HTTPS而不是HTTP。

还有一系列的其他要求来进一步提高安全。例如,App TransPort Security要求TLS(Transport Layer Security) 1.2或者更高。可能你并不是很了解 TLS,但我保证你肯定听过SSL (Secure Sockets Layer)。TLS是SSL的继承人,它是一系列加密协议的集合用来加强在网络连接上的安全性。

Apple最近发表了一篇公开的,先导篇的文章 technote about App Transport Security,给了开发者们一个机会去研究 App Transport Security。这篇文章列出了 App Transport Security 期望从你的应用和与应用交互的网络服务中得到的东西。

例外

等一下。我的应用使用的是我没有权限控制的CDN (Content Delivery Network)而且它不支持HTTPS。别担心,Apple都替你考虑好了。关于App Transport Security,每个应用都属于4个大类当中的一类。我们来看看每一个大类都是怎样影响应用的。

只有HTTPS

如果你的应用只基于HTTPS的服务器。你的应用不需要做任何更改。但是,注意App Tranfport Security要求TLS1.2 而且它要求站点使用forward secrecy协议的密码。证书也要求是符合ATS规格的。因此谨慎检查与你的应用交互的服务器是不是符合ATS的要求非常重要。

混合

你的应用与一个不符合ATS要求的服务器工作是很有可能的。在这种情况下,你需要告诉操作系统哪些站点是涉及到的然后在你的应用的 Info.plist文件中指明哪些要求没有达到。

这意味着对于每个与你应用交互的站点, 除了在你的应用的 Info.plist中声明的那些以外不强制要求App Transport Security,其它的都需要。你可以使用很多的预定义的keys值来配置例外(exceptions)。在下面的 Info.plist文件中,我们定义了3个例外。

 

api.insecuredomain.com

我 们定义的第一个例外告诉ATS当与这个子域交互的时候撤销了必须使用HTTPS的要求。注意这个仅仅针对在例外中声明了的子域。非常重要的一点是要理解 NSExceptionAllowsInsecureHTTPLoads关键字并不仅仅只是与使用HTTPS相关。这个例外指明了对于那个域名,所有的 App Transport Security的要求都被撤销了。

cdn.domain.com

很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义一个例外,它指明应该使用的最小的TLS的版本。这比完全撤销那个域名的App Transport Security要更好更安全。

thatotherdomain.com

NSIncludesSubdomains 关键字告诉 App Transport Security这个例外适用于这个特定域名的所有子域。这个例外还进一步通过扩展可接受的密码列表来定义这个域名可以使用不支持forward secrecy(NSExceptionRequiresForwardSecrecy)  协议的密码。想了解更多关于forward secrecy的信息,我推荐你去看这个文章 Apple's technote

撤销

如果你在创建一个网页浏览器,那么你有一个更大的麻烦。因为你不可能知道你的用户将要访问那个网页,你不可能指明这些网页是否支持ATS要求且在HTTPS上传输。在这种情况下,除了全部撤销 App Transport Security 没有其它办法。

非 常重要的是你要明确的指明撤销 App Transport Security。牢记App Transport Security是默认强制执行的。在你的应用的Info.plist, 文件中,为NSAppTransportSecurity关键值添加一个字典。这个字典应该包括一个关键 字,NSAllowsArbitraryLoads,以及它的值要被设置为YES。如果你撤消了App Transport Security,下面内容就是你的应用的 Info.plist 文件应该看起来像的东西:

有着例外的撤销

第 四个大类是当你的应用撤消了App Transport Security,,但同时定义了一些例外。这非常有用就是当你的应用从很多的服务器上取数据,但是也要与一个你可控的API交互。在这种情况下,在应用 的Info.plist文件中指定任何加载都是被允许的,但是你也指定了一个或多个例外来表明哪些是必须要求 App Transport Security的。下面是Info.plist文件应该会有的内容:

时间

Apple强调如果应用是建于iOS9 或者 OS X El Capitan,那么它们自动的加入 App Transport Security 。这意味着只要你的应用建于 iOS 8或OS X Yosemite上,你不需要对你的应用做任何改变。

基 于以前发布的iOS和OSX X系统的经验,我们了解到Apple在发布了官方版本后不久就要求开发者们使用最新的SDK来创建应用。换句话说,即便你不想在今年末当iOS 9 和OS X El Capitan 发布的时候遵守App Transport Security ,很有可能苹果会在2016年的第一或第二季度要求开发者们基于最新的SDK来开发应用。因此我推荐你尽早研究App Transport Security 将会对你的应用带来的影响。

原文地址:https://www.cnblogs.com/520gp-iOS/p/4854341.html