美文网首页iOS锻炼吃饭的家伙
iOS 开发之ATS安全的配置

iOS 开发之ATS安全的配置

作者: iOS猿类__冬眠的考拉妹妹 | 来源:发表于2017-04-07 17:02 被阅读1033次

    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。

    相关文章

      网友评论

        本文标题:iOS 开发之ATS安全的配置

        本文链接:https://www.haomeiwen.com/subject/czatattx.html