2018.3.20
如原作者要求删除,请联系我,立删。
作者:大虾咪
链接:https://www.jianshu.com/p/d79050dfec6a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
什么是ATS?
App Transport Security,即ATS,是苹果公司在iOS 9和Mac OS X 10.11(El Capitan)操作系统中推出的一个新的安全标准。
尽管苹果公司没有提到watchOS和tvOS,我们可以推测AppTransportSecurity也同样适用于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 SecurityTechnote
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审核时附上合理的原因,否则会导致审核失败。
具体的配置信息,可参照苹果公司官方开发文档
常见问题:
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例外,都会触发额外的审核,需要附上合理的理由,否则会被拒绝上线。
网友评论