[转]iOS9 new_001:iOS9网络适配(ATS)

下载Xcode7打开APP后大家都发现自己的APP无法联网了,why?

苹果官方文档介绍如下:

App Transport Security

App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt; it is also on by default in iOS 9 and OS X v10.11. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.

If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn't follow this requirement, an error is thrown. If your app needs to make a request to an insecure domain, you have to specify this domain in your app's Info.plist file

即,从iOS9开始,所有的http请求都改成了https,采用TLS 1.2协议,目的是增强数据安全。如果不更新的话,暂时可以在Info.plist中声明,使用不安全的网络请求。

先介绍一下设置方法:

最简单的方法在Info.plist中添加以下字段(ATL disabled):

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

也即:

下面详细讨论下ATS:

什么是TLS?

TLS(传输层安全协议)是在SSL 3.0基础上发展起来的,应用最广泛的是TLS 1.0,接下来是SSL 3.0,但主流浏览器都已经实现了TLS 1.2的支持。TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL3.2,TLS 1.2为SSL 3.3。

TLS/SSL的作用是对传输的信息加密并签名,保证第三方无法获得被解密的信息和伪造其中一方向对方发送信息。

其基本思路是采用公钥加密法,即客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

具体的实现细节和运行过程在此不做赘述。

TLS和https有什么关系?

https说白了就是http协议和SSL/TLS协议的组合,可以大致理解为“HTTP over SSL”或“HTTP over TLS”。

不使用SSL/TLS的HTTP通信,所有信息明文传播,带来了三大风险:

1、窃听风险:第三方可以获知通信内容;

2、篡改风险:第三方可以修改通信内容;

3、冒充风险:第三方可以冒充他人身份参与通信。

SSL/TLS协议是为了解决这三大风险而设计的,希望达到:

1、所有信息都是加密传播,第三方无法窃听;

2、具有校验机制,一旦被篡改,通信双方会立刻发现;

3、配备身份证书,防止身份被冒充。

众所周知,iOS9加强了关于用户隐私和数据安全的保护,故强制升级为https,并将其称为App Transport Security(ATS)。虽然任性,但也是符合苹果作风的合理决定。

我们要做些什么?(适配解决方案)

简单来说,两种选择:

选择一(也是根本选择):服务端升级为TLS 1.2,解析数据。

选择二(解决燃眉之急):在Info.plist中进行适配。

下面详细介绍一下选择二的配置。

最简单的适配方法是在Info.plist配置中改为下面的XML源码:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

也即:

事实上,除了NSAllowsArbitraryLoads外,还有很多其他的key,如下:

其含义分别为:

NSAppTransportSecurity

ATS的top level key.

NSAllowsArbitraryLoads

设置是否对任意请求关闭ATS,默认为NO(开启)。

NSExceptionDomains

放置需要关闭ATS的domains的字典。

<domain-name-for-exception-as-string>

设置需要关闭ATS的domains。其中key为域名。

NSExceptionMinimumTLSVersion

设置支持的最低TLS版本,默认为TLS 1.2.

NSExceptionRequiresForwardSecrecy

设置使用的密码方式。

NSExceptionAllowsInsecureHTTPLoads

设置是否允许http请求,默认为NO。

NSRequiresCertificateTransparency

设置是否需要SSL证书。

NSIncludesSubdomains

设置是否允许subdomains

NSThirdPartyExceptionMinimumTLSVersion

NSThirdPartyExceptionRequiresForwardSecrecy

NSThirdPartyExceptionAllowsInsecureHTTPLoads

设置第三方的ATS。

具体每个key的作用,可参见:

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

其他具体配置方法,可参见:

http://www.neglectedpotential.com/2015/06/working-with-apples-application-transport-security/

介于每次iOS系统升级的用户量都较大,可以预见当iOS9正式版推出后,将会有大批用户迁移,因而做https适配对于更加的用户体验及数据安全都十分重要。

参考:

1、https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_13

2、https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html

3、http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

4、http://www.neglectedpotential.com/2015/06/working-with-apples-application-transport-security/

iOS9网络适配(ATS)的更多相关文章

  1. iOS-pthread && NSThread && iOS9网络适配

    几个概念: 进程:"正在运行"应用程序(app)就是一个进程,它至少包含一个线程:            进程的作用:为应用程序开辟内存空间: 线程:CPU调度的最小单元:     ...

  2. iOS9网络适配

    今天升级Xcode7.0,发现网络访问失败. 输出错误信息:The resource could not be loaded because the App Transport Security po ...

  3. iOS 9之适配ATS(转载)

    iOS 9系统已经出来了,而网络方面的ATS(App Transport Security)特性可以说每个人都要经历.而我这篇博客,就是结合我最近几天的经历,来谈谈从服务器到iOS客户端对ATS的适配 ...

  4. iOS 10 适配 ATS(app支持https通过App Store审核)

    iOS 10 适配 ATS 一. HTTPS 其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据 ...

  5. ios9网络请求https适配

    发现问题:今天升级Xcode 7.0 bata发现网络访问失败.输出错误信息: The resource could not be loaded because the App Transport S ...

  6. iOS 10 适配 ATS

    一. HTTPS 其实HTTPS从最终的数据解析的角度,与HTTP没有任何的区别,HTTPS就是将HTTP协议数据包放到SSL/TSL层加密后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的 ...

  7. Demo1_iOS9网络适配_改用更安全的HTTPS

    iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一 使用TLS 1.2 SSL.采用TLS 1.2 协议,目的是 强制增强数据访问安全,而且 系统 Foundation ...

  8. iOS9 中关闭ATS的方法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS9中增加了系统的安全性,你会发现默认情况下打开非http ...

  9. IOS9网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

    今天下载Xcode7试了下,运行项目时报上面的错误,网上查了下原来iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (A ...

随机推荐

  1. Linux进程环境

    Linux下C程序都是main开始的,main函数的原型是: int main(int argc, char **argv) 其中argc是命令行参数的数目,argc是指向参数的各个指针所构成的数组. ...

  2. Java 8 指南

    Benjamin Winterberg “Java is still not dead—and people are starting to figure that out.” 欢迎阅读我对 Java ...

  3. VS 生成事件

    转载自: http://hi.baidu.com/gisince/item/7f0439ee610c94255a2d64b4 今天写了生成事件的处理,如下: 从网上Down了一个例子,运行时提示错误 ...

  4. 商城项目:装nginx时碰到的各种问题

    因为项目需要,我们要在linux上nginx.碰到了各种问题.在这里一一记录下来. 首先我要开启我的两个虚拟机,开起来之后.用主机的SeureCRT去连接.都是好的. 但是我在虚拟机机上去ping I ...

  5. 迁移 SQL Server 数据库到 Azure SQL 实战

    最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助. 文章来源:葡萄城产 ...

  6. JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

  7. Stack的三种含义

    作者: 阮一峰 日期: 2013年11月29日 学习编程的时候,经常会看到stack这个词,它的中文名字叫做"栈". 理解这个概念,对于理解程序的运行至关重要.容易混淆的是,这个词 ...

  8. linux设置定时备份mysql数据库

    最近写自己的项目,买了阿里云服务器,可以在云上根据自己想到的需求随意使用技术,感觉很爽.备份mysql流程如下: 环境:CentOS Linux release 7.2.1511 (Core) mys ...

  9. Unity Animator动画状态机 深入理解(一)

    接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...

  10. Shell入门

    前言 日常用Python多一些,不过很多时候shell脚本更简单实用一些,所以有必要熟悉一下shell脚本.当然shell有他特定的一些场景,比方说我曾经改过一个vpn断线自动重连的脚本,简单实用. ...