什么是ATS?
App Transport Security,即ATS,是苹果公司在iOS 9和Mac OS X 10.11(El Capitan)操作系
统中推出的一个新的安全标准。尽管苹果公司没有提到watchOS和tvOS,我们可以推测App
Transport Security也同样适用于watchOS 2和tvOS。App Transport Security的目标是提高苹
果iOS及Mac操作系统的安全性以及在此操作系统上运行的任何应用的安全性。
基于HTTP传输数据的网络请求都是明文传输。很明显,明文传输会引起相当大的安全风险。
苹果公司强调每个开发者都应该保证客户的数据安全,尽管那些数据可能看起来并不是很重要
或者很敏感。
App Transport Security通过强力推行一系列的安全标准来积极地促进安全性,最重要的一个
就是要求网络请求必须在一个安全的链路上传输。开启App Transport Security后,网络传输
自动通过HTTPS传输而不是HTTP。
还有一系列其他的要求来进一步提高安全性能。例如,App Transport Security要求TLS
(Transport Layer Security)是1.2版本或者更高。TLS是SSL的改进和替代,它是一系列加密
协议的集合用来加强在网络连接上的安全性。
ATS安全标准的要求
ATS(App Transport Security)是为了提高App与服务器之间安全传输数据一个特性,这个特性从iOS 9和Mac OS X 10.11开始使用,它默认需要满足以下几个条件:
服务器必须启用HTTPS,且TLS版本至少是1.2版本连接加密只允许几种先进的加密算法 证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。
如果想了解哪几种加密算法是被允许的,详情请见官方文档App Transport Security Technote(https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistK
eyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW57)
ATS带来的影响
苹果公司要求,从2017年1月起,所有新上线或更新的应用,都应该支持ATS安全标准。
苹果公司会在开发商提交iTunes Connect/App Store审核时核应用对ATS的支持。对于无法完全支持ATS,需要在应用内连接非ATS安全标准的服务,可以添加例外,但在审核时需要提供合理的理由。
对于大部分公司而言,采用HTTPS/TLS并使用安全的服务器证书已是目前的标准配备。启用ATS安
全标准,一般只需要排查服务器和客户端的配置。
测试与排查
服务端排查
我们需要借助第三方工具来测试服务端是否支持ATS。
首先,我们要取得客户端直接连接的服务端域名及端口,例如mob.com.cn,端口443,即HTTPS默认端口。测试的对象一般是行里的Web服务器、反向代理机或SSL服务器,无需直接对应用服务器进行测试。
针对公网可访问的生产环境地址,我们建议使用QUALYS SSL Labs的在线监测工具。操作步骤
如下:
访问QUALYS SSL Labs的网址:https://www.ssllabs.com/ssltest/index.html
输入域名和端口,如mob.com.cn。默认端口443可省略。并开始测试。
等待几分钟后,就会出现测试结果。
Summary部分显示的是总体评分,显示绿色的A即为安全。如果评分低于A,则需要具体分析减分项。
在Authentication部分,需要确认如下内容:
–Key中的算法为RSA、秘钥长度大于等于2048位,或者算法为ECC、秘钥长度
大于等于256位。
–Signature algorithm中的签名算法为下列支持的算法之一:
SHA256WithRSA
SHA384WithRSA
SHA512WithRSA
ECDSAWithSHA256
ECDSAWithSHA384
ECDSAWithSHA512
在Configuration部分,需要确认如下内容:
–Protocols下,TLS 1.2必须为Yes,TLS 1.0、1.1可以为Yes(为了兼容旧设备),
SSL 2/3必须为No。
–Cipher Suites必须包含如下算法中的一个或多个:
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
确认过以上内容,即表示服务端符合ATS安全标准。
客户端排查
客户端从iOS 9 SDK起默认开启ATS,一般无需进行代码改造。需要注意如下几点:
客户端需要以域名的方式连接服务器,IP地址形式的连接,是不符合ATS要求的。
客户端如果需要访问第三方服务器,或者内嵌了第三方提供的SDK,则需要确认第三方的服务端开启了ATS支持。
客户端工程中的Info.plist中,不能包含NSAllowsArbitraryLoads键及其他NSAllowsArbitrary*键。
注意以上几点,即可保证客户端支持ATS。
有时,客户端内嵌入了第三方的SDK,不容易得知第三方服务是否开启ATS支持。检查的方式是,在开启确认客户端ATS支持后,进行功能测试,确认第三方提供的功能在ATS开启后还能正常运转。
如果第三方提供的功能在ATS模式下无法正常运转,则表明其不支持ATS。如果必须使用这
类功能,则需要给客户端设置ATS例外。
在Info.plist中添加例外键值对,含义如下:
NSExceptionDomains为特定域名设置例外
NSAllowsArbitraryLoadsInWebContent为WebView设置例外,允许UIWebView访问不
支持ATS的服务器。仅iOS 10有效。
NSAllowsArbitraryLoadsInMedia允许加载不支持ATS的媒体内容,音频、视频等等
注意,在添加了例外之后,会触发额外的审核,请在提交App Store审核时附上合理的原因,否则会导致审核失败。
具体的配置信息,可参照苹果公司官方开发文档:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKey
Reference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW35
常见问题
1.是否需要采购额外硬件,才能开启ATS?
不用。银行系统中常用的Web服务器/反向代理服务器,如Apache Web Server、Nginx、HAProxy等均支持ATS所需的安全技术,常用的VeriSign、Symantec签发的服务器证书,一般也符合要求,无需另行采购硬件。对于SSL服务器等硬件,需要和厂商确认是否支持及如何配置。
2.应用服务器及后台应用是否需要改造?
不用。部署在内网的应用服务器无需进行改造,只要其前方的Web服务器或反向代理经过正确配置,符合ATS要求即可。
3.如果在2017年1月前未完成ATS相关改造,我的现有应用是否会受到影响?
已经在App Store上线的应用,还可以继续使用。
4.如果在2017年1月前未完成ATS相关改造,还可以提交新的版本吗?
不可以。在iTunes Connect/App Store审核过程中,会核查ATS支持情况,对于不支持的应用会拒绝上线。
5.既然可以添加ATS例外,把银行的生产服务器添加进去是否可以?
不可以。任何添加的ATS例外,都会触发额外的审核,需要附上合理的理由,否则会被拒绝上线。