什么是ATS?
App Transport Security荤堪,即ATS吻商,是蘋果公司在iOS 9和Mac OS X 10.11(El Capitan)操作系
統(tǒng)中推出的一個新的安全標(biāo)準(zhǔn)豆混。盡管蘋果公司沒有提到watchOS和tvOS,我們可以推測App
Transport Security也同樣適用于watchOS 2和tvOS棋枕。App Transport Security的目標(biāo)是提高蘋
果iOS及Mac操作系統(tǒng)的安全性以及在此操作系統(tǒng)上運行的任何應(yīng)用的安全性材部。
基于HTTP傳輸數(shù)據(jù)的網(wǎng)絡(luò)請求都是明文傳輸。很明顯杏节,明文傳輸會引起相當(dāng)大的安全風(fēng)險唬渗。
蘋果公司強(qiáng)調(diào)每個開發(fā)者都應(yīng)該保證客戶的數(shù)據(jù)安全,盡管那些數(shù)據(jù)可能看起來并不是很重要
或者很敏感奋渔。
App Transport Security通過強(qiáng)力推行一系列的安全標(biāo)準(zhǔn)來積極地促進(jìn)安全性镊逝,最重要的一個
就是要求網(wǎng)絡(luò)請求必須在一個安全的鏈路上傳輸。開啟App Transport Security后嫉鲸,網(wǎng)絡(luò)傳輸
自動通過HTTPS傳輸而不是HTTP撑蒜。
還有一系列其他的要求來進(jìn)一步提高安全性能。例如充坑,App Transport Security要求TLS
(Transport Layer Security)是1.2版本或者更高减江。TLS是SSL的改進(jìn)和替代染突,它是一系列加密
協(xié)議的集合用來加強(qiáng)在網(wǎng)絡(luò)連接上的安全性捻爷。
ATS安全標(biāo)準(zhǔn)的要求
ATS(App Transport Security)是為了提高App與服務(wù)器之間安全傳輸數(shù)據(jù)一個特性,這個特性從iOS 9和Mac OS X 10.11開始使用份企,它默認(rèn)需要滿足以下幾個條件:
服務(wù)器必須啟用HTTPS也榄,且TLS版本至少是1.2版本連接加密只允許幾種先進(jìn)的加密算法 證書必須使用SHA256或者更好的哈希算法進(jìn)行簽名,要么是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月起囚霸,所有新上線或更新的應(yīng)用,都應(yīng)該支持ATS安全標(biāo)準(zhǔn)激才。
蘋果公司會在開發(fā)商提交iTunes Connect/App Store審核時核應(yīng)用對ATS的支持拓型。對于無法完全支持ATS额嘿,需要在應(yīng)用內(nèi)連接非ATS安全標(biāo)準(zhǔn)的服務(wù),可以添加例外劣挫,但在審核時需要提供合理的理由册养。
對于大部分公司而言,采用HTTPS/TLS并使用安全的服務(wù)器證書已是目前的標(biāo)準(zhǔn)配備压固。啟用ATS安
全標(biāo)準(zhǔn)球拦,一般只需要排查服務(wù)器和客戶端的配置。
測試與排查
服務(wù)端排查
我們需要借助第三方工具來測試服務(wù)端是否支持ATS帐我。
首先坎炼,我們要取得客戶端直接連接的服務(wù)端域名及端口,例如mob.com.cn拦键,端口443点弯,即HTTPS默認(rèn)端口。測試的對象一般是行里的Web服務(wù)器矿咕、反向代理機(jī)或SSL服務(wù)器抢肛,無需直接對應(yīng)用服務(wù)器進(jìn)行測試。
針對公網(wǎng)可訪問的生產(chǎn)環(huán)境地址碳柱,我們建議使用QUALYS SSL Labs的在線監(jiān)測工具捡絮。操作步驟
如下:
訪問QUALYS SSL Labs的網(wǎng)址:https://www.ssllabs.com/ssltest/index.html
輸入域名和端口,如mob.com.cn莲镣。默認(rèn)端口443可省略福稳。并開始測試。
等待幾分鐘后瑞侮,就會出現(xiàn)測試結(jié)果的圆。
Summary部分顯示的是總體評分,顯示綠色的A即為安全半火。如果評分低于A越妈,則需要具體分析減分項。
在Authentication部分钮糖,需要確認(rèn)如下內(nèi)容:
–Key中的算法為RSA梅掠、秘鑰長度大于等于2048位,或者算法為ECC店归、秘鑰長度
大于等于256位阎抒。
–Signature algorithm中的簽名算法為下列支持的算法之一:
SHA256WithRSA
SHA384WithRSA
SHA512WithRSA
ECDSAWithSHA256
ECDSAWithSHA384
ECDSAWithSHA512
在Configuration部分,需要確認(rèn)如下內(nèi)容:
–Protocols下消痛,TLS 1.2必須為Yes且叁,TLS 1.0、1.1可以為Yes(為了兼容舊設(shè)備)秩伞,
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
確認(rèn)過以上內(nèi)容质涛,即表示服務(wù)端符合ATS安全標(biāo)準(zhǔn)。
客戶端排查
客戶端從iOS 9 SDK起默認(rèn)開啟ATS掰担,一般無需進(jìn)行代碼改造汇陆。需要注意如下幾點:
客戶端需要以域名的方式連接服務(wù)器,IP地址形式的連接带饱,是不符合ATS要求的毡代。
客戶端如果需要訪問第三方服務(wù)器,或者內(nèi)嵌了第三方提供的SDK勺疼,則需要確認(rèn)第三方的服務(wù)端開啟了ATS支持教寂。
客戶端工程中的Info.plist中,不能包含NSAllowsArbitraryLoads鍵及其他NSAllowsArbitrary*鍵执庐。
注意以上幾點酪耕,即可保證客戶端支持ATS。
有時轨淌,客戶端內(nèi)嵌入了第三方的SDK迂烁,不容易得知第三方服務(wù)是否開啟ATS支持。檢查的方式是递鹉,在開啟確認(rèn)客戶端ATS支持后盟步,進(jìn)行功能測試,確認(rèn)第三方提供的功能在ATS開啟后還能正常運轉(zhuǎn)躏结。
如果第三方提供的功能在ATS模式下無法正常運轉(zhuǎn)却盘,則表明其不支持ATS。如果必須使用這
類功能媳拴,則需要給客戶端設(shè)置ATS例外黄橘。
在Info.plist中添加例外鍵值對,含義如下:
NSExceptionDomains為特定域名設(shè)置例外
NSAllowsArbitraryLoadsInWebContent為WebView設(shè)置例外屈溉,允許UIWebView訪問不
支持ATS的服務(wù)器塞关。僅iOS 10有效。
NSAllowsArbitraryLoadsInMedia允許加載不支持ATS的媒體內(nèi)容语婴,音頻描孟、視頻等等
注意驶睦,在添加了例外之后砰左,會觸發(fā)額外的審核,請在提交App Store審核時附上合理的原因场航,否則會導(dǎo)致審核失敗缠导。
具體的配置信息,可參照蘋果公司官方開發(fā)文檔:
https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKey
Reference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW35
常見問題
1.是否需要采購額外硬件溉痢,才能開啟ATS?
不用僻造。銀行系統(tǒng)中常用的Web服務(wù)器/反向代理服務(wù)器憋他,如Apache Web Server、Nginx髓削、HAProxy等均支持ATS所需的安全技術(shù)竹挡,常用的VeriSign、Symantec簽發(fā)的服務(wù)器證書立膛,一般也符合要求揪罕,無需另行采購硬件。對于SSL服務(wù)器等硬件宝泵,需要和廠商確認(rèn)是否支持及如何配置好啰。
2.應(yīng)用服務(wù)器及后臺應(yīng)用是否需要改造?
不用。部署在內(nèi)網(wǎng)的應(yīng)用服務(wù)器無需進(jìn)行改造儿奶,只要其前方的Web服務(wù)器或反向代理經(jīng)過正確配置框往,符合ATS要求即可。
3.如果在2017年1月前未完成ATS相關(guān)改造闯捎,我的現(xiàn)有應(yīng)用是否會受到影響?
已經(jīng)在App Store上線的應(yīng)用椰弊,還可以繼續(xù)使用。
4.如果在2017年1月前未完成ATS相關(guān)改造瓤鼻,還可以提交新的版本嗎?
不可以男应。在iTunes Connect/App Store審核過程中,會核查ATS支持情況娱仔,對于不支持的應(yīng)用會拒絕上線沐飘。
5.既然可以添加ATS例外,把銀行的生產(chǎn)服務(wù)器添加進(jìn)去是否可以?
不可以牲迫。任何添加的ATS例外耐朴,都會觸發(fā)額外的審核,需要附上合理的理由盹憎,否則會被拒絕上線筛峭。