iOS App Transprot Security
随着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的更多相关文章
- 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 ...
- iOS App Transport Security
网络请求提示:Application Transport Security has blocked a cleartext HTTP (http://) resource load since it ...
- 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://) ...
- 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 ...
- 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 ...
- 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中配置.除了配置允许上网的配置之外,还有另一项.
- 【iOS】App Transport Security
iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输.这也意味着所有的HTTP协议都强制使用了HTTPS ...
- 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 ...
- App Transport Security has blocked a cleartext HTTP (http://)
使用SDWebImage加载“http://”开头的图片报错,错误如下: App Transport Security has blocked a cleartext HTTP (http://) r ...
随机推荐
- LDAP none、simple、strong 笔记
// 该笔记仍在调研中!!不确保中有错误信息!最终目的是想用java实现这三种认证方式. 1.ldaps:// 注意多了个s 参考:https://mail.python.org/pipermail ...
- Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接
问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在 showShare 方法里面添加配置: if(ImageUrlOrP ...
- 华为手机使用objectAnimation异常
在一个recyclerView上实现item的立体翻转动画,魅族.小米.华为平板都试过了没问题,但是在一个7.0的华为手机上,只要一翻转item就消失了,网上发现也有其他人遇到这种问题,大概是obje ...
- html5与css3学习实践--基础的内容划分标签
从位置上划分出网页的区域以后,就需要用到网页的内容标签了,比如<article>.<aside>.<nav>.<p>.<h1>等.网页中,这 ...
- [转]java加密算法简要介绍
本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法. BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密 ...
- Android 8 wifi 扫描时间间隔
wifi setting界面扫描时间间隔:10s 不在wifi setting界面,扫描时间间隔,最小20s,然后按找2倍的间隔进行递增,40s,60s..., 最大160s PNO 即Preferr ...
- Hessian示例:Java和C#通信
一个简单的利用Hessian在Java和C#之间通信的例子,服务端为Java,客户端为C#. 资源下载 先要准备好C#和Java的第三方类库:http://hessian.caucho.com/ Hs ...
- Java对象序列化给分布式计算带来的方便
什么时候使用序列化: 一:对象序列化可以实现分布式对象.主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样.二:对象序列化不仅保留一个对象的数据,而且递归保存对象引 ...
- hive以文件创建表
create table location( location string, ip string, name string, city string, classfication string, c ...
- 微信小程序/支付宝小程序 WxParse解析富文本(html)代码
小程序本身并不太支持html代码,比如html的img.span.p这个时候改这么办呢?需要用到一个小插件WxParse来实现. 小程序高级交流群:336925436 微信小程序支持富文本编辑器代码 ...