其他分享
首页 > 其他分享> > iOS9 - NSAppTransportSecurity

iOS9 - NSAppTransportSecurity

作者:互联网

原文链接:https://my.oschina.net/youtk21ai/blog/540704

iOS9 - NSAppTransportSecurity

原文地址:http://www.pluto-y.com/ios9-nsapptransportsecurity/

App Transport Security(以下均称ATS)是iOS9提供的一个新特性,主要是保证app和web服务之间的安全。如果不想开启的话,可以关闭这个特性。

所有用到NSURLConnectionCFURL以及NSURLSessionAPI都会触发ATS(使用iOS9的SDK编译)验证, 所以在iOS9中需要符合一些配置才可以使ATS正常运行。

配置要求

关于App Transport Security 的一些进本配置要求:
* 服务器只要支持TLS协议1.2
* 加密算法也是有限制,需要在以下列表中

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

属性结构

如果你的服务器不是HTTPS的协议,想要添加例外可以在程序中的info.plist文字间 添加例外。甚至是你不想开启ATS的话,都可以在配置文件中进行配置。关于配置项可以参考下表:

Key Type 备注
NSAppTransportSecurity Dictionary 根属性
NSAllowsArbitraryLoads Boolean 一级属性
NSExceptionDomains Dictionary 一级属性
< domain-name-for-exception-as-string > Dictionary 二级属性
NSExceptionMinimumTLSVerion String 三级属性
NSExceptionRequiresForwardSecrecy Boolean 三级属性
NSExceptionAllowsInsecureHTTPLoads Boolean 三级属性
NSIncludesSubdomains Boolean 三级属性
NSThirdPartyExceptionMinimumTLSVersion String 三级属性
NSThirdPartyExceptionRequiresForwardSecrecy Boolean 三级属性
NSThirdPartyExceptionAllowsInsecureHTTPLoads Boolean 三级属性

属性的目录结构如下:
* NSAppTransportSecurity
* NSAllowsArbitraryLoads
* NSExceptionDomains
* < domain-name-for-exception-as-string >
* NSExceptionMinimumTLSVerion
* NSExceptionRequiresForwardSecrecy
* NSExceptionAllowsInsecureHTTPLoads
* NSIncludesSubdomains
* NSThirdPartyExceptionMinimumTLSVersion
* NSThirdPartyExceptionRequiresForwardSecrecy
* NSThirdPartyExceptionAllowsInsecureHTTPLoads

属性详解

事例讲解

只有HTTPS

如果你的APP所访问的所有的服务器都只有HTTPS的话,那么恭喜你,完全不需要配置ATS你的App即可使用,也就是说iOS 9中的ATS对你来说并没有什么卵用。

所有网址都不经过ATS(关闭ATS)

这个配置最简单,只要通过配置NSAllowsArbitraryLoads,将其设置成No即可。具体如下:
关闭ATS

所有网址都经过ATS,添加一些例外(白名单)

如果你想App中的网址都通过ATS验证,只有少数一些网址例外的话,你可以为少数的网址添加NSExceptionDomains,并且在下面添加你需要添加的网址即可。然后对每个网址进行分别的设置,其中将NSIncludeSubdomains以及NSExceptionAllowsInsecureHttpLoads设置成YES,即可不通过ATS验证。具体如下:
部分添加例外的配置

所有网址都不经过ATS,添加例外

如果你想App大部分的网址都不经过ATS,少数几个网址通过ATS验证的话,你可以先将NSAllowsArbitraryLoads设置成YES,这样就可以使所有网址都不经过ATS,然后将少数一些需要经过ATS验证的网址添加到NSExceptionDomains中,并将NSExceptionAllowsInsecureHTTPLoads设置成NO即可。具体如下:
部分通过ATS配置

使用低等级版本的TLS协议

如果你使用的服务器没办法支持TLS1.2的协议的话,也不大要紧,可以通过配置来支持低版本的TLS协议。将对应没办法进行高版本的服务器在NSExceptionDomains下建立一个的对应的域名,在对应域名下添加NSExceptionRequiresForwardSecrecy设置成NO并且将NSExceptionMinimumTLSVersion设置成对应的TLS的版本号即可。具体如下:
低等级协议配置

如何配置

其实在Mac OS X 10.11中,苹果给我们提供了个超牛逼的功能,简单来说就是提供了一个命令行的工具来产生对应的配置项给我们。但是由于我没有升级到Mac OS X10.11X所以我就没办法进行测试了。至于其中的奥秘,等更新了系统之后再进行补充。

转载于:https://my.oschina.net/youtk21ai/blog/540704

标签:TLS,AES,配置,RSA,iOS9,ATS,NSAppTransportSecurity,属性
来源: https://blog.csdn.net/chouzhan4828/article/details/100812976