天天看點

蘋果ATS(強制HTTPS)稽核新政解碼

app transport security(ats) 是apple為增強ios app網絡通信安全提出的安全功能,适用于ios app和app extension;在啟用ats之後,它會強制應用通過https(而不是http)連接配接網絡服務。

【注意】這僅是app store稽核政策的變更,而不是技術上的限制,即app通過ats相應配置仍可以通過http進行網絡通路(測試時可使用)。

<code>nsallowsarbitraryloads</code>,預設值為<code>no</code>,置為yes後,所有網絡請求不受ats的限制;

<code>nsallowsarbitraryloadsformedia</code>,預設值為<code>no</code>,置為yes後,使用<code>av foundation</code>架構載入資源時不受ats的限制;(ios 10.0及以上支援,測試發現真機可行,模拟器未起作用)

<code>nsallowsarbitraryloadsinwebcontent</code>,預設值為<code>no</code>,置為yes後,使用web view的網絡請求不受ats限制;(ios 10.0及以上支援)

<code>nsallowslocalnetworking</code>,預設值為<code>no</code>,置為yes後,本地網絡請求不受ats限制;(ios 10.0及以上支援)

<code>nsexceptiondomains</code>,配置特定域名的ats通路屬性;

<code>nsincludessubdomains</code>,預設值為<code>no</code>,置為yes後,該域名的ats配置适用于其子域名;

<code>nsexceptionallowsinsecurehttploads</code>,預設值為<code>no</code>,置為yes後,該域名可通過http請求通路但tls版本要求不會改變;

<code>nsexceptionminimumtlsversion</code>,預設值為<code>tlsv1.2</code>,設定該域名支援的tls最低版本,有效值:<code>tlsv1.0</code>、<code>tlsv1.1</code>和<code>tlsv1.2</code>;

<code>nsexceptionrequiresforwardsecrecy</code>,預設值為<code>yes</code>,置為no後,通路該域名時tls ciphers可以不支援完全正向保密(pfs);

<code>nsrequirescertificatetransparency</code>,預設值為<code>no</code>,置為yes後,通路該域名時伺服器證書需要有效的sct(signed certificate timestamps)。

【注意】<code>nsallowsarbitraryloads</code>、<code>nsallowsarbitraryloadsformedia</code>、<code>nsallowsarbitraryloadsinwebcontent</code>和<code>nsexceptionallowsinsecurehttploads</code>任一屬性置為<code>yes</code>或設定<code>nsexceptionminimumtlsversion</code>,都會觸發app store的額外稽核并需要送出對應說明(詳情見2.3節)。

nsurlconnection/nsurlsession相關及任何基于此的上層api;

經測試,基于ip通路的http請求(使用nsurlconnection/nsurlsession),在ios 9系統上受ats限制;但在ios 10系統上不受ats限制,可以正常通路。

ios 9.0+系統支援,低于ios 9.0系統忽略<code>nsapptransportsecurity</code>的配置。

使用apple底層網絡api或第三方網絡庫api,不受ats限制。

當ats要求全部使能時,https網絡連接配接需要滿足下面要求:

x.509證書必須至少滿足下面一種條件:

由根證書是作業系統安裝的ca頒發;

由使用者或系統管理者信任并安裝的根證書頒發;

連接配接必須使用aes-128或aes-256對稱加密算法,tls協商算法必須通過ecdhe密鑰交換保證完全正向保密(perfect forward secrecy, pfs),ecdhe密鑰必須屬于下面一種:

伺服器葉證書必須使用下列的密鑰簽名:

至少2048位的rsa密鑰;

至少256位的ecc密鑰;

https通路指定域名開啟certificate transparency後,參照1.1節描述,<code>nsrequirescertificatetransparency</code>需要置為<code>yes</code>。

目前apple官方沒有系統、完整地說明ats的稽核标準,部分已經明确的稽核要求參考下面描述。

上傳到app store要稽核的app,若需要放寬ats的安全限制,配置有以下列出的<code>ats</code>相關屬性,便會<code>觸發額外稽核</code>,并要求<code>送出聲明</code>,說明配置的原因,具體含義可參考1.1節描述;

ats的提出,是為了在系統層面保障ios app網絡通信的安全;apple隻是以加強對ats配置的稽核,是為了防止開發者們遇到ats相關的場景時,隻是簡單地将ats完全關閉(隻要沒有強制性措施,開發者會這麼做);在此基礎上,app稽核同樣會遵循原則:app review will require "reasonable justification" for most ats exceptions.

apple官方給出的可以通過稽核的聲明demo如下:

必須使用第三方提供的服務,但是其沒有支援https;

必須通過域名連接配接到裝置,但該裝置不能支援安全連接配接;

必須展示不同來源的網頁内容,但是不能基于<code>nsallowsarbitraryloadsinwebcontent</code>支援的類(uiwebview / wkwebview)實作;

載入加密的媒體資源并且其中不涉及個人資訊。

由于apple官方并沒有給出ats稽核的完整說明,ats稽核時什麼才是合适合理的聲明也沒有明确的客觀定義,以上demo描述僅能作為參照;為保險起見,建議盡快按照apple要求進行https适配。

使用apple上層網絡api(nsurlconnection/nsurlsession)的http通路,

基于域名通路的請求,需要按照按照2.1節描述進行https适配;

基于ip通路的請求,在ios 10系統可以不受ats限制正常通路,建議同樣進行https适配。

使用apple底層網絡api進行的網絡請求無需進行https适配。

盡可能地按照要求完成https的适配,若應用場景必須進行<code>ats exceptions</code>的配置(比如,浏覽器應用必須同時支援http/https載入、強依賴的第三方服務沒有支援https通路等),保證ats exceptions配置最小化,app稽核時按照2.3節描述給出合理的解釋聲明。

https适配完成後,可以先使用<code>/usr/bin/nscurl</code>(os x v10.11及以上系統支援)工具模拟進行ats網絡連接配接狀況診斷,指令如下:

連接配接指定url時,

<code>--ats-diagnostics</code>參數的設定,會模拟ats屬性的不同配置場景(nsallowsarbitraryloads、nsexceptionminimumtlsversion、nsexceptionrequiresforwardsecrecy和nsexceptionallowsinsecurehttploads的不同組合)進行連接配接;

<code>--verbose</code>指定時,可顯示ats不同配置場景的詳細資訊。

例,檢測阿裡雲官網<code>www.aliyun.com</code>

<a href="https://developer.apple.com/library/prerelease/content/documentation/general/reference/infoplistkeyreference/articles/cocoakeys.html#//apple_ref/doc/uid/tp40009251-sw59">apple-nsapptransportsecurity</a>

<a href="https://developer.apple.com/videos/play/wwdc2016/706/">wwdc-what's new in security</a>

<a href="http://devstreaming.apple.com/videos/wwdc/2016/706sgjvzkvg6rrg9icw/706/706_whats_new_in_security.pdf">wwdc-what's new in security-pdf</a>

<a href="https://forums.developer.apple.com/thread/14816">app transport security tip</a>

<a href="https://developer.apple.com/library/content/technotes/tn2232/_index.html">https server trust evaluation</a>

<a href="https://forums.developer.apple.com/thread/48979">apple forum -1</a>

<a href="https://forums.developer.apple.com/thread/51508">apple forum -2</a>

<a href="https://forums.developer.apple.com/message/15705#15705">apple forum -3</a>

ats稽核政策還未正式公布,存在變動的可能,上述分析僅供參考。

繼續閱讀