随着iOS 9和OS X EI Capitan 的发布,苹果官方引入了应用通讯安全模式的概念。简而言之,应用通讯安全模式强制性要求应用需要使用最佳的安全通讯协议,比如TLS 1.2版本和前向保密技术。在不久的将来,苹果也将更新这些最佳实践以确保他们在保障网络数据安全的潮流中走在前列。

在iOS 9 和 OS X EI Caption之后,当使用NSURLSession的时候默认会开启ATS。然而不幸的是,对于大多数开发者而言,这将意味着在他们基于新版本的操作系 统做开发时,情况有了很大的变化。好消息是,苹果官方提供了一些可选配置项来决定是否开启ATS模式,也就是可以选择开启或者不开启。

开发者可以针对某些确定的URL不使用ATS,这需要在工程中的info.plist中标记NSExceptionDomains。在NSExceptionDomains字典中,可以显式的指定一些不使用ATS的URL。这些你可以使用的例子可以是:

- NSIncludesSubdomains

- NSExceptionAllowInsecureHTTPLoads

- NSExceptionRequiresForwardSecrecy

- NSExceptionMinimumTLSVersion

- NSThirdPartyExceptionAllowsInsecureHTTPLoads

- NSThirdPartyExceptionMinimumTLSVersion

- NSThirdPartyExceptionRequiresForwardSecrecy

这些关键字使我们可以更加细致的设置针对不使用ATS的域名情况下禁用ATS或者一些特殊的ATS选项。

**在iOS 9 的beta1版本中,上述的关键字是错误的,应该使用如下关键字:**

- NSTemporaryExceptionAllowsInsecureHTTPLoads

- NSTemporaryExceptionRequiresForwardSecrecy

- NSTemporaryExceptionMinimumTLSVersion

- NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads

- NSTemporaryThirdPartyExceptionMinimumTLSVersion

- NSTemporaryThirdPartyExceptionRequiresForwardSecrecy

这些关键字在不久以后肯定会被替换掉。如果可以,你应该使用第一组的关键字,因为苹果官方支持这些关键字。虽然你正在使用临时的关键字,但它应该在将来的beta版本中还是可以继续使用的。

下面是一些开发者可能会在开发过程中遇到的情况。

例1 所有情况下都使用ATS

这是最简单的情况。唯一需要做的事情就是使用NSURLSession。如果你的开发目标是iOS 9或者 OS X EI Capitan之后,ATS的最佳实践将会应用到所有基于NSURLSession的网络。

例2 特殊情况除外,都使用ATS

如 果你希望自己所有的域名,除了一些已知并不会使用ATS之外的,所有通信都使用ATS。这种情况下你可以指定一些不使用ATS的特殊情况,而其余的情况使 用ATS。对于这种场景,可以使用*NSExceptionDomains*来标识使用ATS默认设置的域。为了筛选出所有域或者子域,可以创建一个包含 想要排除使用ATS的URL的字典,然后设置其中的*NSExceptionAllowInsecureHTTPLoads*的值为true。如果想要对 于这些域完全禁用ATS,也可以指定更多的规则来限制,如使用*NSExceptionRequiresForwardSecrecy* 和*NSExceptionMinimumTLSVersion*关键字。

例3 除特殊情况外,都不使用ATS

一 种与上例相反的情况,你可能进希望在你明确知道支持的域内使用ATS。比如,如果开发一个Twitter客户端,可能需要有难以计数的可能不支持ATS的 URL需要加载,可是你希望网络状况想发起登录请求和请求Twitter服务器的其他请求一致。在这种情况下,你可以设置禁用ATS为默认选项,然后指定 需要使用ATS的URL。

这种情况下,需要设置*NSAllowArbitraryLoads*为true,然后 在*NSExceptionDomains*字典中定义需要保证安全性的URL。需要保证安全性的每个域都需要有自己的字典,而且字典中 的*NSExceptionAllowInsecureHTTPLoads*选项需要设置为false。

例4 低级的ATS

在 某些情况下,可能ATS用于所有情况,或者一些,或者是自有的URL,但是并未针对所有的ATS最佳实践全部支持。也许你的应用服务器仅支持 TLS1.2,但是不支持之后的版本,与其把涉及到的所有域都设置为不用ATS,不如设置为支持版本较低的ATS。这种场景下,需要创建一 个*NSExceptionDomains*字典,这是一个对于每个域都要重用的字典选项,然后设 置*NSExceptionRequiresForwardSecrecy*值为false。类似的,如果你希望向前支持,但是需要最低版本的TLS,你 可以通过*NSExceptionMinimumTLSVersion*关键字定义你的应用服务器所支持的TLS版本。

例5 NSA-friendly 模式

如果想完全不使用ATS(不建议使用这种模式,并且需要你完全理解其隐藏的危险。)你可以在info.plist中设置*NSAllowArbitraryLoads*属性为true。

第三方键值

你可能注意到一些关键字像是使用了一些其他关键字中的词但是在前面加上了"ThirdParty"字样:

- NSThirdPartyExceptionAllowsInsecureHTTPLoads

- NSThirdPartyExceptionMinimumTLSVersion

- NSThirdPartyExceptionRequiresForwardSecrecy

在功能上,这些关键字与不含有"ThirdParty"的关键字有同样的效果。而且实际运行中所调用的代码将会完全忽略是否使用"ThirdParty"关键字。你应该使用适用于你的场景的关键字而不必过多考虑这些。

Certificate Transparency

虽然ATS大多数安全特性都是默认可用的,Certificate Transparency 是 必须设置的。如果你有支持Certificate Transparency的证书,你可以检查NSRequiresCertificateTransparency关键字来使用Certificate Transparency。再次强调,如果你的证书不支持Certificate Transparency,此项需要设置为不可用。

如果 需要调试一些由于采用了ATS而产生的问题,需要设置CFNETWORK_DIAGNOSTICS为1,这样就会打印出包含被访问的URL和ATS错误在 内的NSURLSession错误信息。要确保处理了遇到的所有的错误消息,这样才能使ATS易于提高可靠性和扩展性。

以上所有信息都 WWDC 2015 NSURLSession session 中有所体现。最后,苹果强调需要上报开发过程所有的问题并且需要密切关注将来beta版本中的可能产生的变化。

适配iOS9新特性:http://www.leiphone.com/news/201509/sLMiLyOsK3qzhkRJ.html

iOS App Transprot Security的更多相关文章

  1. iOS App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

    You can easily add it to the plist using the GUI: On the last line add the + Enter the name of the g ...

  2. iOS App Transport Security

    网络请求提示:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it ...

  3. iOS App 不支持http协议 App Transport Security has blocked a cleartext HTTP (http://)

    目前iOS已经不支持http协议了,不过可以通过info.plist设置允许 App Transport Security has blocked a cleartext HTTP (http://) ...

  4. iOS: iOS9 beta 请求出现App Transport Security has blocked a cleartext HTTP (http://)

    错误描述: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecu ...

  5. IOS开发 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

    xcode自7后不再使用http,而是使用https请求,但目前很多网络请求还只是以http请求,我们可以这样解决 info.plist->添加@“App Transport Security ...

  6. iOS使用webView 加载网页,在模拟器中没有问题,而真机却白屏了。App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist f

    还在info.plist中配置.除了配置允许上网的配置之外,还有另一项.

  7. 【iOS】App Transport Security

    iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS ...

  8. App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file

    ios进行http请求,会出现这个问题: App Transport Security has blocked a cleartext HTTP (http://) resource load sin ...

  9. App Transport Security has blocked a cleartext HTTP (http://)

    使用SDWebImage加载“http://”开头的图片报错,错误如下: App Transport Security has blocked a cleartext HTTP (http://) r ...

随机推荐

  1. Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查

    在上一篇文章中讲解了如何生成EF的DBFirst模式,接下来讲解如何使用DBFirst模式实现数据库数据的增删改查 一.新增数据 新增一个Student,代码如下: static void Add() ...

  2. WebRTC 学习资源 电子书 WebRTC权威指南 Learning WebRTC

    webRTC源码下载地址:https://pan.baidu.com/s/18CjClvAuz3B9oF33ngbJIw 提取码:wl1e 1.<WebRTC权威指南>第三版 中文版 本书 ...

  3. POST数据时400错误

    第一种解决办法是关闭Csrf public function init(){ $this->enableCsrfValidation = false; } 第二种解决办法是在form表单中加入隐 ...

  4. Struts2,Spring,Hibernate框架的优缺点

    Struts2,Spring,Hibernate框架的优缺点 Struts2框架(MVC框架)的优点如下:         1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现:   ...

  5. 关于安装black apple遇到的坑

    1.用料准备: vmware player或vmware workstation,osx系统安装包(后缀名为cdr的几个G大小的文件),为vmware安装osx的补丁安装包unlocker 2.在安装 ...

  6. How MapReduce Works

    转自:http://blog.csdn.net/luyee2010/article/details/8624470 一.从Map到Reduce MapReduce其实是分治算法的一种实现,其处理过程亦 ...

  7. VISUAL STUDIO 2012下的OPENCV 2.4.7安装过程

    邮箱已经收到了Visual Studio 2013的升级通知,但是很多软件如OpenCV.Qt等都只有VS2012的预编译库,还是懒得升级了(除非VS支持C++11了). 网上搜了一些VS2012(或 ...

  8. Pandas 读取文本格式数据

    title 其实书中说的我认为不够全,因为公司里面现在主要用stata和spss,暂时还没有用到sas,excel也很少用 那么读取文件的方式,因为有人已经总结了,我就偷过来算了 对应不同的文件类型有 ...

  9. 【Centos】【Python】【Flask】阿里云上部署一个 flask 项目

    1. 安装 python3 和 pip3 参考:http://www.cnblogs.com/mqxs/p/8692870.html 2.安装 lnmpa 集成开发环境 参考:http://www.c ...

  10. SSH框架环境搭建问题:Line: 230 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:230:-1

    只是通过myeclipse搭建一个框架而已 启动tomcat时报错信息: File: SpringObjectFactory.java Method: getClassInstance Line: 2 ...