ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

iOS9 - NSAppTransportSecurity

2019-09-13 23:01:17  阅读:341  来源: 互联网

标签:TLS AES 配置 RSA iOS9 ATS 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

  • 必须是用至少是HA256的算法,用至少是2048位的RSA的key 或至少是256位的Elliptic-Curve(ECC)的key所产生的证书

属性结构

如果你的服务器不是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

属性详解

  • NSAppTransportSecurity : 一个用于配置App Transport Security行为的属性,在Info.plist中是于Bundle Identifier同一级别的属性。
  • NSAllowsArbitraryLoads : 一个用于针对不在NSExceptionDomains中的配置项。如果设置成YES,则对于那些不在NSExceptionDomains的域则不需要通过ATS的验证。默认值是No
  • NSExceptionDomains : 用于配置例外的配置项,即在该配置项中的域不需要通过ATS的验证。
  • < domain-name-for-exception-as-string > : 需要添加例外的域名字符串,如:www.baidu.com
  • NSExceptionMinimumTLSVerion : 用于指定例外域名的TSL的版本号,可用的配置有TLSv1.0TLSv1.1以及TLSv1.2三个配置项。
  • NSExceptionRequiresForwardSecrecy : 用于指定所配置的域协议是否在ATS的所要求的第三点中。如果是YES,则说明所配置的域符合要求的第三点,如果是NO, 则加密算法必须是以下这几种。默认值是YES

    TLS_RSA_WITH_AES_256_GCM_SHA384
    TLS_RSA_WITH_AES_128_GCM_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_RSA_WITH_AES_128_CBC_SHA256
    TLS_RSA_WITH_AES_128_CBC_SHA

  • NSExceptionAllowsInsecureHTTPLoads : 用于指明所配置的域是否个HTTPS的服务器。用这个配置可用访问那些没有证书、自签名证书、过期证书以及证书与域名匹配不上的服务器。默认值是NO

  • NSIncludesSubdomains : 用于指明子域名是否使用同样的配置。默认值是NO
  • NSThirdPartyExceptionMinimumTLSVersion : 该变量在如果是域名为第三的域名,且开发人员无法控制的情况下进行配置。
  • NSThirdPartyExceptionRequiresForwardSecrecy : 该变量在如果是域名为第三的域名,且开发人员无法控制的情况下进行配置。
  • NSThirdPartyExceptionRequiresForwardSecrecy : 该变量在如果是域名为第三的域名,且开发人员无法控制的情况下进行配置。

事例讲解

只有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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有