iOS锻炼吃饭的家伙

iOS 开发之ATS安全的配置

2017-04-07  本文已影响1033人  iOS猿类__冬眠的考拉妹妹

2016年11月至12月提交的应用到appstore的小伙伴都知道,所有的HTTP请求都必须为HTTPS,尽管后来又说会delay半年实施,但是保险起见,小编我还是已经换成了https,并且做了相应的安全配置;

一.ATS描述

iOS9中新增App Transport Security(ATS)特性,主要使原来请求的时候用到的HTTP都转向TLS1.2协议进行传输。默认情况下非HTTPS的网络访问是被禁止的。通过NSAllowsArbitraryLoads 设置为YES 来禁用ATS。

WWDC16中,Apple表示继续收紧对HTTP的访问限制。2017年1月1日起,所有的新提交app默认是不允许使用NSAllowArbitraryLoads来绕过ATS限制的,换句话说,我们最好保证app的所有网络请求都是HTTPS加密的,否则可能会在应用审核时遇到麻烦。

二、强调iOS Security,改成https请求的原因

1>现在手机已经成为大家接入互联网的主要设备;

2>移动场景下的数据安全问题更加复杂,Wi-Fi定向攻击随时随地都有可能发生;

3>Wi-Fi、短信、电话、密码、手机卡这些已经越发的公开和透明化;

4>伴随着互联网金融的爆发,P2P理财、余额宝、银行客户端等越来越不安全;

三、苹果公司针对这些隐患所做的安全措施

1>手机硬件芯片级的安全(苹果把安全做到芯片上);一方面,public key由苹果公司提供,且不可伪造;另一方面,设备的每次软件升级都需要苹果的认证;

2>Data protection

password:password作为种子,加上硬件信息共同生成的加密密钥;

sandbox:沙河将数据隔离,所有用户的权限获得,都需要用户同意;

code signing:代码都是需要签名的,整个系统以及所有应用,都在code siging的检查下运行的;

touch ID:指纹采集器sensor由独立的通道传递信息到secwe endave

3>用户软件升级上的安全(iOS10.x,iOS9.x,iOS8.x)

4>开发者层面上的安全:(1)Touch ID 可被开发者使用;(2)App-Transport Security (3)使用TLS1.2以上的安全协议;(4)HTTP+Security,变为安全传输通道;

四、iOS10 NSAppTransportSecurity

1>Server端 :购买SSL证书,配置Nginx;

2>iOS客户端的配置如下:

对NSAppTransportSecurity的支持自iOS9.0,OS X v10.11开始,适用于App和App extension。

对于使用iOS9.0,OS X v10.11SDK及以上的App来说,ATS默认开启。在启用ATS的情况下,所有的HTTP请求必须为HTTPS(RFC2808)链接。任何不安全的HTTP请求都将失败。ATS使用TLSv1.2(RFC5246)以上,才可通讯。

在项目的info.plist中配置这个键,开发者可以自定义网络安全策略。自iOS10,macOS 10.12开始,新增了下列子健的支持:

NSAllowsArbitraryLoadsInMedia

NSAllowsArbitraryLoadsInWebContent

NSRequiresCertificateTransparency

NSAllowsLocalNetworking

ATS的总体结构,都是非必填

NSAppTransportSecurity : Dictionary {

NSAllowsArbitraryLoads : Boolean

NSAllowsArbitraryLoadsInMedia : Boolean

NSAllowsArbitraryLoadsInWebContent : Boolean

NSAllowsLocalNetworking : Boolean

NSExceptionDomains : Dictionary {

: Dictionary {

NSIncludesSubdomains : Boolean

NSExceptionAllowsInsecureHTTPLoads : Boolean

NSExceptionMinimumTLSVersion : String

NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES

NSRequiresCertificateTransparency : Boolean

}

}

}

以上主键用来定义app的总体ATS策略;

子健 NSExceptionDomains下面的键,使用这些键针对某个域名单独配置。

主键:NSAllowsArbitraryLoads 设置为YES,禁用ATS限制注意:设置为YES会引发App Stroe的审查,开发者必须说明原因。不能说服审核人员,将被拒。

主键:NSAllowsArbitraryLoadsInMedia 设置为YES,解除通过AVFoundation框架访问媒体内容时的ATS限制;启用这个键,务必确保载入的媒体内容已经被加密,例如受FairPlay保护的文件,或者是安全的HLS流媒,其中不包含敏感的个人信息。

主键:NSAllowsArbitraryLoadsInWebContent 设置为YES 解除通过webview发出的网络请求的ATS限制。启用这个键,可以使app访问任意的网页内容,但不影响app的总体ATS策略。

主键:NSAllowsLocalNetworking 设置为YES 使得app可以载入任意本地资源,但不影响app的总体ATS策略。

主键:NSExceptionDomains 为一个或多个域名单独配置ATS。

被单独配置的域名,默认受到完全的ATS限制,不管NSAllowsArbitraryLoads的值如何:需要通过子健,进一步配置,所有子健都属于NSExceptionDomains。

子键1:NSIncludesSubdomains 设置为YES,当前域名的ATS策略使用于所有子域名。默认NO。

子键2:NSExceptionAllowsInsecureHTTPLoads 设置为YES,可以同时通过HTTP和HTTPS访问当前域名。默认NO。注意配置这个键值将引发AppStore的审查,开发者必须说明原因。

子键3:NSExceptionMinimumTLSVersion 指定TLS的最低版本,可以使用版本较低的,有安全漏洞的TLS协议。注意,配置这个键值,将引发AppStore的审查,开发者必须说明原因。

子键4:NSExceptionRequiresForwardSecrecy设置为NO,允许对当前域名使用不支持正向保密的TLS加密算法。默认YES。

子键5:NSRequiresCertificateTransparency设置为YES,将验证域名服务器证书的Certificate Transparency时间戳。默认NO。

上一篇下一篇

猜你喜欢

热点阅读