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 将会对你的应用带来的影响。

时间: 2024-08-06 14:13:40

iOS 9:ATS的相关文章

关于 iOS 10 中 ATS 的问题

WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推进网络通讯安全的一个重要方式.在 iOS 9 和 OS X 10.11 中,默认情况下非 HTTPS 的网络访问是被禁止的.当然,因为这样的推进影响面非常广,作为缓冲,我们可以在 Info.plist 中添加 NSAppTransportSecurity 字典并且将 NSAllowsArbitraryLoads 设置为 YES 来禁用 ATS.相信大家都已经对这个非常熟悉了,因为我自己也维护了一

Android &Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

IOS学习:常用第三方库(GDataXMLNode:xml解析库)

IOS学习:常用第三方库(GDataXMLNode:xml解析库) 分类: ios开发学习2013-05-30 09:45 4443人阅读 评论(0) 收藏 举报 iOSXMLGDataXMLNode 一.GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法. 使用方法: 1.获取GDataXMLNode.h/m文件,将GDataXMLNo

iOS开发:使用Tab Bar切换视图

iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Content View.这次,我们还是讲一讲切换视图,不过这次使用的是Tab Bar. 这次要写的程序运行起来的效果是这样的:底部有几个图标,每个图标对应一个视图.每点击一个图标,对应的视图就会打开.如下图,就是我们做好的程序效果:    每个Tab Bar有一个对应颜色的视图. 为了搞清使用Tab Bar切

iOS Developer:真机测试(转载)

目录[-] 一.真机调试所需材料说明 二.开始申请 三.添加App ID 四.添加设备(Devices) 五.添加证书(Certificates) 六.添加描述文件(Provisioning Profiles) 七.配置XCode 八.P12导出证书 转载请注明出处,原文地址http://my.oschina.net/joanfen/blog/167730 如果本文不能解决您的问题请移步:http://my.oschina.net/u/1245365/blog/196420 关于证书选项呈灰色的

iOS开发:AVPlayer实现流音频边播边存

iOS开发:AVPlayer实现流音频边播边存 概述 1. AVPlayer简介 AVPlayer存在于AVFoundation中,可以播放视频和音频,可以理解为一个随身听 AVPlayer的关联类: AVAsset:一个抽象类,不能直接使用,代表一个要播放的资源.可以理解为一个磁带子类AVURLAsset是根据URL生成的包含媒体信息的资源对象.我们就是要通过这个类的代理实现音频的边播边下的 AVPlayerItem:可以理解为一个装在磁带盒子里的磁带 2. AVPlayer播放原理 给播放器

iOS UIKit:viewController之动画(5)

当弹出一个view controller时,UIKit提供了一些标准转换动画,并且也支持用户自定义的动画效果. 1 UIView动画 UIView是自带动画实现功能,其中有两种方式实现:        1) animateWithDuration系列方法        2) transitionFromViewController方法 1.1 animateWithDuration 只要在该方法的animations block中修改UIView的动画属性,那么即可实现动画变换,所以为conta

iOS 代码审查:宽松的指导方针(iOS Code Review: Loose Guidelines)

iOS 代码审查:宽松的指导方针 (iOS Code Review: Loose Guidelines) Jack Nutting February 19, 2014 IOS + From time to time I've been asked to do an independent code review, to determine the overall health of a client's code base. Unlike a code walkthrough, where so

iOS笔记:Objective-C自定义NSLog宏

/*  XCode LLVM XXX - Preprocessing中Debug会添加 DEBUG=1 标志  */ #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORM