蘋果文檔翻譯 iOS10 NSAppTransportSecurity

蘋果文檔翻譯 iOS10 NSAppTransportSecurity

  • 原文鏈接
  • 原文版本:2016-09-07
  • 翻譯時(shí)間:2016-09-07

本文截取自蘋果官方文檔 Information Property List Key Reference ---> Cocoa Keys ---> NSAppTransportSecurity

NSAppTransportSecurity(對(duì)應(yīng)的值為字典類型)被用來(lái)定義 app 在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí)的安全設(shè)定:為現(xiàn)有安全機(jī)制設(shè)定特例,或者開啟新的安全特性。

在蘋果的開發(fā)平臺(tái)上,有一種被稱為App Transport Security(ATS)的網(wǎng)絡(luò)安全機(jī)制,適用于 app 以及 app extension,默認(rèn)開啟。這項(xiàng)機(jī)制確保 app 在進(jìn)行網(wǎng)絡(luò)訪問(wèn)時(shí),使用業(yè)界標(biāo)準(zhǔn)的,沒(méi)有已知重大安全隱患的協(xié)議和加密方式,以此確保用戶的隱私和數(shù)據(jù)完整性。從而培養(yǎng)用戶對(duì)您的 app 的信任。

通過(guò)在info.plist中配置這個(gè)鍵,開發(fā)者可以自定義網(wǎng)絡(luò)安全策略。例如:

  • 允許針對(duì)個(gè)別服務(wù)器的不安全訪問(wèn)。
  • 允許不安全的 web 或媒體內(nèi)容訪問(wèn),但不影響整個(gè) app 的 ATS 策略。
  • 啟用新的安全特性,例如Certificate Transparency。

對(duì)NSAppTransportSecurity的支持自 iOS9.0,OS X v10.11 開始,適用于 app 和 app extension。

自 iOS10.0,macOS 10.12 開始,增加了對(duì)下列子鍵的支持:

  • NSAllowsArbitraryLoadsInMedia
  • NSAllowsArbitraryLoadsInWebContent
  • NSRequiresCertificateTransparency
  • NSAllowsLocalNetworking

目錄

  • ATS Configuration Basics / ATS 配置基礎(chǔ)知識(shí)
  • Using ATS in Apple Frameworks / 在 Apple 框架中使用 ATS
  • Availability of ATS for Remote and Local Connections / 本地 & 遠(yuǎn)程連接與 ATS
  • Requirements for Connecting Using ATS / 使用 ATS 的前提條件
  • Certificate Transparency
  • ATS and Overriding HTTPS Server Trust Evaluation / ATS 與改寫服務(wù)端信任評(píng)估規(guī)則
  • App Store Review for ATS / App Store 對(duì)于 ATS 相關(guān)項(xiàng)的審核
  • ATS Dictionary Details / ATS 字典詳細(xì)信息
  • ATS Examples / ATS 配置實(shí)例
  • Debugging ATS Connections / ATS Debugging 相關(guān)
  • Using the nscurl Tool to Diagnose ATS Connection Issues / 使用 nscurl 工具診斷 ATS 相關(guān)問(wèn)題

ATS Configuration Basics / ATS 配置基礎(chǔ)知識(shí)

對(duì)于使用 iOS9.0, OS X v10.11 SDK 及以上的 app 來(lái)說(shuō),ATS(App Transport Security)默認(rèn)開啟,NSAllowsArbitraryLoads是字典NSAppTransportSecurity的根鍵,默認(rèn)值NO

在啟用 ATS 的情況下,所有的 HTTP 請(qǐng)求必須為 HTTPS(RFC 2818) 連接。任何不安全的 HTTP 請(qǐng)求都將失敗。ATS 使用 TLS(Transport Layer Security)v1.2(RFC 5246)。更多關(guān)于安全連接的信息,請(qǐng)查閱HTTPS Server Trust Evaluation。

下面是字典NSAppTransportSecurity的總體結(jié)構(gòu),所有鍵都是非必填項(xiàng):

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean
    NSAllowsArbitraryLoadsInMedia : Boolean
    NSAllowsArbitraryLoadsInWebContent : Boolean
    NSAllowsLocalNetworking : Boolean
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
            NSRequiresCertificateTransparency : Boolean
        }
    }
}

可以看出,所有鍵可以分為兩類:主鍵,這些鍵用來(lái)定義 app 的總體 ATS 策略;子鍵,即NSExceptionDomains下面的鍵,使用這些鍵針對(duì)某個(gè)域名單獨(dú)配置。

主鍵包括:

  • NSAllowsArbitraryLoads

    • 設(shè)置為 YES,解除整個(gè) app 的 ATS 限制;但是,通過(guò)NSExceptionDomains進(jìn)行的配置依然有效。默認(rèn)值為 NO。
    • 注意:設(shè)置為 YES,會(huì)引發(fā) App Stroe 的審查,開發(fā)者必須說(shuō)明原因。
  • NSAllowsArbitraryLoadsInMedia

    • 設(shè)置為 YES,解除通過(guò) AV Foundation 框架訪問(wèn)媒體內(nèi)容時(shí)的 ATS 限制;啟用這個(gè)鍵,務(wù)必確保載入的媒體內(nèi)容已經(jīng)被加密,例如受FairPlay保護(hù)的文件,或者是安全的HLS流媒,其中不包含敏感的個(gè)人信息。默認(rèn)為 NO。
  • NSAllowsArbitraryLoadsInWebContent

    • 設(shè)置為 YES,解除通過(guò) web view 發(fā)出的網(wǎng)絡(luò)請(qǐng)求的 ATS 限制。啟用這個(gè)鍵,可以使 app 訪問(wèn)任意網(wǎng)頁(yè)內(nèi)容,但不影響 app 的總體 ATS 策略。此鍵值默認(rèn)為 NO。
  • NSAllowsLocalNetworking

    • 設(shè)置為 YES,使得 app 可以載入任意本地資源,但不影響 app 的總體 ATS 策略。默認(rèn)為 NO。
  • NSExceptionDomains

    • 為一個(gè)或多個(gè)域名單獨(dú)配置 ATS。
    • 被單獨(dú)配置的域名,默認(rèn)受到完全的 ATS 限制,不管NSAllowsArbitraryLoads的值如何;需要通過(guò)子鍵,進(jìn)一步配置。

閱讀表2,獲取關(guān)于上述主鍵的詳細(xì)信息。

所有的子鍵都屬于NSExceptionDomain。向Info.plist中添加這一主鍵:

  • 創(chuàng)建字典,針對(duì)一個(gè)或多個(gè)域名,以便進(jìn)行 ATS 配置。
  • 這意味著之前使用主鍵所做的設(shè)置,對(duì)于這個(gè)域名來(lái)說(shuō),已經(jīng)無(wú)效。

例如,及時(shí)之前設(shè)置NSAllowsArbitraryLoadsInMedia為 YES,然而NSExceptionDomain所代表的域名依然不能訪問(wèn)不安全的媒體內(nèi)容。

基于這樣的設(shè)定,可以針對(duì)域名進(jìn)行 ATS 配置,增加或減少安全措施。例如:

  • NSExceptionAllowsInsecureHTTPLoads設(shè)置為 YES,就 ;這樣做會(huì)引發(fā) App Store 的審查,詳情見App Store Review for ATS。
  • 通過(guò)配置NSExceptionRequiresForwardSecrecy為 NO,取消正向保密。
  • 通過(guò)配置NSExceptionMinimumTLSVersion,更改 TLS 最低版本。

還參考Certificate Transparency,保證訪問(wèn)特定域名時(shí)的安全,詳情見Certificate Transparency。

NSExceptionDomains字典構(gòu)成:

  • <域名字符串>
    • 代表想要配置的特定域名??梢蕴砑佣鄠€(gè)域名(即添加多個(gè)這樣的鍵),為它們統(tǒng)一配置 ATS 策略。這個(gè)鍵對(duì)應(yīng)一個(gè)字典,包含以下子鍵:
      • NSIncludesSubdomains
        • 設(shè)置為 YES,當(dāng)前域名的 ATS 策略適用于其所有子域名。默認(rèn)為 NO。
      • NSExceptionAllowsInsecureHTTPLoads
        • 設(shè)置為 YES,可以同時(shí)通過(guò) HTTP 和 HTTPS 訪問(wèn)當(dāng)前域名。默認(rèn)為 NO。
        • 注意,配置這個(gè)鍵值,將引發(fā) App Store 的審查,開發(fā)者必須說(shuō)明原因。
      • NSExceptionMinimumTLSVersion
        • 指定 TLS 的最低版本,因此可以使用版本較低,有安全漏洞的 TLS 協(xié)議。
        • 注意,配置這個(gè)鍵值,將引發(fā) App Store 的審查,開發(fā)者必須說(shuō)明原因。
      • NSExceptionRequiresForwardSecrecy
        • 設(shè)置為 NO,允許針對(duì)當(dāng)前域名使用不支持正向保密的 TLS 加密算法。默認(rèn)為 YES。
      • NSRequiresCertificateTransparency
        • 設(shè)置為 YES,將驗(yàn)證域名服務(wù)器證書的Certificate Transparency時(shí)間戳 。默認(rèn)為 NO。

閱讀表3,獲取關(guān)于NSExceptionDomains的進(jìn)一步詳細(xì)信息。


Using ATS in Apple Frameworks / 在 Apple 框架中使用 ATS

NSURLSession 以及所有與其相關(guān)的 API 都實(shí)現(xiàn)了對(duì) ATS 的支持;如果您的 app 基于 iOS9.0 SDK 或 OS X v10.11 SDK 以上版本開發(fā),ATS 自動(dòng)開啟。(較老的 NSURLConnection 同樣會(huì)在上述 SDK 中開啟對(duì) ATS 的支持。)然而,在使用底層網(wǎng)絡(luò) API 或第三方網(wǎng)絡(luò)庫(kù)時(shí),無(wú)法受到 ATS 的保護(hù)。

**注意**:使用底層 API 或第三方網(wǎng)絡(luò)庫(kù)時(shí),請(qǐng)仔細(xì)考量風(fēng)險(xiǎn)因素。

iOS9.0 或 OS X v10.11 以下版本,不支持 ATS,NSAppTransportSecurity會(huì)被操作系統(tǒng)忽略。當(dāng) ATS 不可用時(shí),系統(tǒng)將根據(jù)RFC 2818提供標(biāo)準(zhǔn)的 HTTPS 安全策略,對(duì)服務(wù)端進(jìn)行驗(yàn)證。

當(dāng)您的 app 運(yùn)行在 iOS9.0 或者 OS X v10.11以下時(shí),網(wǎng)絡(luò)連接仍然可用,但 ATS 不起作用。


Availability of ATS for Remote and Local Connections / 本地 & 遠(yuǎn)程與 ATS

ATS 只針對(duì)公共域名起效。ATS 對(duì)已下連接無(wú)效:

  • IP 地址
  • 非法域名
  • 使用.local作為頂級(jí)域名的本地主機(jī)

為了連接非法域名或本地域名,需要將NSAllowsLocalNetworking設(shè)置為 YES。

**注意**:雖然本地連接并不強(qiáng)制使用 ATS,但 Apple 強(qiáng)烈推薦開發(fā)者通過(guò)TLS + 自簽名證書的方式訪問(wèn)本地連接。

Requirements for Connecting Using ATS / 使用 ATS 的前提條件

在 ATS 完全開啟的情況下,系統(tǒng)要求 app 的 HTTPS 連接必須滿足以下要求:

  • X.509 數(shù)字證書必須滿足下列標(biāo)準(zhǔn)中的一項(xiàng):

    • 由操作系統(tǒng)內(nèi)嵌的根證書頒發(fā)機(jī)構(gòu)簽發(fā)
    • 由通過(guò)操作系統(tǒng)管理員或用戶主動(dòng)安裝的根證書頒發(fā)機(jī)構(gòu)簽發(fā)
  • TLS 版本必須為1.2,任何不使用或使用較低版本 TLS / SSL 的連接,都將失敗。

  • 連接必須使用 AES-128 或 AES-256 對(duì)稱加密算法。 TLS 算法套裝必須以 ECDSA 密鑰交換的形式支持正向保密,加密算法必須為下面之一:

    • 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
  • 服務(wù)端的葉證書簽名密鑰必須為下面之一:

    • 至少2048位的 RSA 密鑰
    • 至少256位的 ECC 密鑰
    • 此外,服務(wù)器證書的哈希算法必須為 SHA-2,其摘要長(zhǎng)度至少位256位(即 SHA-256 及以上)。

上面的標(biāo)準(zhǔn),未來(lái)可能會(huì)發(fā)生變化。但不會(huì)影響到 app 二進(jìn)制包的兼容性。


Certificate Transparency

暫略


ATS and Overriding HTTPS Server Trust Evaluation / ATS 和 改寫服務(wù)器授信校驗(yàn)規(guī)則

能否自行改寫服務(wù)器授信校驗(yàn)規(guī)則,取決于 ATS 是否針對(duì)某個(gè)域名開啟。解釋如下:

  • 如果 ATS 針對(duì)域名開啟,無(wú)法改寫。
  • 如果 ATS 未針對(duì)域名開啟,系統(tǒng)將按照默認(rèn)規(guī)則進(jìn)行授信校驗(yàn),可以改寫。

App Store Review for ATS / App Store 對(duì)于 ATS 相關(guān)項(xiàng)的審核

某些對(duì) ATS 的配置會(huì)引發(fā) App Store 的審核,開發(fā)者必須說(shuō)明原因。這些鍵有:

  • NSAllowsArbitraryLoads
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

以下是一些原因說(shuō)明例子,供參考:

  • 必須連接由其他機(jī)構(gòu)控制的服務(wù)器,其還不支持安全連接。
  • 必須支持那些還未升級(jí)至可使用安全連接,不得不通過(guò)公共域名訪問(wèn)網(wǎng)絡(luò)的設(shè)備。
  • 必須通過(guò) web 展示來(lái)源不一的各種網(wǎng)絡(luò)內(nèi)容,但又不能完全使用NSAllowsArbitraryLoadsInWebContent所管理的類。

向 App Store 提交審核時(shí),開發(fā)者應(yīng)主動(dòng)提供足夠的信息,以便解釋 app 無(wú)法使用安全連接的原因。


ATS Dictionary Details / ATS 字典詳細(xì)信息

表2列出了NSAppTransportSecurity字典所有主鍵信息,通過(guò)定義這些主鍵,開發(fā)者可以配置 app 的網(wǎng)絡(luò)行為。同NSExceptionDomains相關(guān)的子鍵信息請(qǐng)查看表3。

表2 ATS 字典主鍵

鍵名 Xcode
描述名
類型 描述
NSAllowsArbitraryLoads “Allow Arbitrary Loads” Boolean 非必填項(xiàng),設(shè)置為 YES,關(guān)閉 ATS,通過(guò)NSExceptionDomains配置的域名除外。
使用這個(gè)鍵將引發(fā) App Store 的審核,開發(fā)者必須說(shuō)明原因。
這個(gè)鍵有助于開發(fā)和 debug。
iOS10 或 macOS 10.12 以上系統(tǒng)中,如果下列鍵出現(xiàn)在info.plist中,這個(gè)鍵的值將被忽略:<li> NSAllowsArbitraryLoadsForMediaContent<li> NSAllowsArbitraryLoadsInWebContent<li> NSAllowsLocalNetworking
注意,關(guān)閉 ATS, 所有的網(wǎng)絡(luò)連接(HTTP / HTTPS)不再受到限制;可以使用低版本的 TLS 協(xié)議;可以使用不支持正向保密的加密算法。
默認(rèn)值為 NO,表示對(duì)所有連接采用默認(rèn)的 ATS 策略,通過(guò)NSExceptionDomains進(jìn)行配置的域名除外。
NSAllowsArbitraryLoadsInMedia 無(wú) Boolean 非必填項(xiàng),設(shè)置為 YES ,關(guān)閉對(duì)于通過(guò) AV Foundation 框架訪問(wèn)的媒體內(nèi)容的 ATS 限制,詳情見AV Foundation Framework Reference。
僅在媒體內(nèi)容已經(jīng)被加密,如受到 FairPlay 保護(hù);或者播放安全的 HLS 流媒體;并且不包含個(gè)人信息時(shí)啟用這個(gè)鍵。
如果 info.plist 包含這個(gè)鍵,不管它的值是什么,ATS 都將忽略 NSAllowsArbitraryLoads的值。
這個(gè)鍵的默認(rèn)值為 NO。
iOS10.0 和 macOS 10.12 及以上可用。
NSAllowsArbitraryLoadsInWebContent 無(wú) Boolean 非必填項(xiàng),只針對(duì)下列類有效:<li>WKWebView<li>UIWebView(iOS)<li>WebView(macOS)
當(dāng)設(shè)置為 YES 時(shí),app 的 web 視圖進(jìn)行內(nèi)容訪問(wèn)時(shí)可以不受 ATS 限制,同時(shí)不影響其他諸如NSURLSession的安全策略。
默認(rèn)值為 NO。
為了支持舊版本的 iOS 和 OS X,可以使用這鍵的同時(shí),手動(dòng)配置 ATS:將這個(gè)鍵的值設(shè)置為 YES,同時(shí)配置NSAllowsArbitraryLoads子鍵。
如果 info.plist 包含這個(gè)鍵,不論其值如何,NSAllowsArbitraryLoads的值將被忽略。
iOS10.0 和 macOS 10.12 及以上可用。
NSAllowsLocalNetworking 無(wú) Boolean 非必填項(xiàng),設(shè)置為 YES,移除所有針對(duì)非法域名和.local開頭的域名的 ATS 限制,對(duì)于其他域名沒(méi)有影響。
如果設(shè)置為 YES,NSAllowsArbitraryLoads的值將被忽略(iOS10.0 和 macOS 10.12以后)。這種設(shè)定使得 app 的內(nèi)置本地瀏覽器在以前的版本仍舊正常工作,同時(shí)在新的版本獲得完整的 ATS 保護(hù)。(設(shè)置方法:將這個(gè)鍵設(shè)置為 YES,并且將NSAllowsArbitraryLoads也設(shè)置為 YES)。
默認(rèn)值為 NO。
iOS10.0 和 macOS 10.12 及以上可用。
NSExceptionDomains “Exception Domains” Boolean 非必填項(xiàng),針對(duì)某個(gè)域名單獨(dú)配置 ATS 策略。這個(gè)字典中的每個(gè)鍵都對(duì)應(yīng)一個(gè)字典,用來(lái)描述針對(duì)特定域名的網(wǎng)絡(luò)安全策略。
最上層的鍵是域名字符串;例如,www.apple.com,其必須符合以下規(guī)范:<li>全部小寫<li>不能包含端口號(hào)<li>不能是數(shù)字表示的 IP 地址 <li>不能以.結(jié)尾,除非開發(fā)者確定要這樣做。例如,example.com.對(duì)應(yīng)"example.com."(末尾有點(diǎn)),而非example.com。類似的,example.com對(duì)應(yīng)"example.com"(末尾無(wú)點(diǎn)),而非example.com.。
更多關(guān)于此字典的信息,參加表3。

表3列舉了用來(lái)針對(duì)某個(gè)域名進(jìn)行網(wǎng)絡(luò)安全配置所使用的鍵。

表3 針對(duì)某個(gè)域名進(jìn)行網(wǎng)絡(luò)安全配置的子鍵

鍵名 Xcode
描述名
類型 描述
NSIncludesSubdomains 無(wú) Boolean 非必填項(xiàng),設(shè)置為 YES,當(dāng)前域名的 ATS 策略適用于其所有子域名。
默認(rèn)值為 NO。
NSRequiresCertificateTransparency 無(wú) Boolean 非必填項(xiàng),設(shè)置為 YES,將驗(yàn)證域名服務(wù)器證書的Certificate Transparency時(shí)間戳。
默認(rèn)值為 NO。
iOS10.0 和 macOS 10.12 及以上可用。
NSExceptionAllowsInsecureHTTPLoads 無(wú) Boolean 非必填項(xiàng),設(shè)置為 YES,將允許不安全的網(wǎng)絡(luò)連接,但不改變 TLS 策略。如果確定域名足夠安全,可以使用這個(gè)鍵。
使用這個(gè)鍵將引發(fā) App Store 的審核,開發(fā)者必須說(shuō)明原因。
設(shè)置為 YES,app 可以針對(duì)當(dāng)前域名同時(shí)使用 HTTP 連接和 HTTPS 連接;不安全的訪問(wèn)形式包括:證書缺失,自簽名,過(guò)期,證書不符等。
可能需要啟用這個(gè)鍵的情形:<li>需要通過(guò)不安全的連接訪問(wèn)當(dāng)前域名<li>訪問(wèn)無(wú)法進(jìn)行授信校驗(yàn)的服務(wù)器<li>訪問(wèn) HTTPS 服務(wù)器,但需要改寫服務(wù)器授信校驗(yàn)規(guī)則
有時(shí),這個(gè)鍵需要配合其他鍵使用。例如,需要安全連接一個(gè)自簽名服務(wù)器,或者服務(wù)器 TLS 版本低于1.2,這時(shí),將NSExceptionAllowsInsecureHTTPLoads設(shè)置為 YES,然后將NSExceptionMinimumTLSVersion設(shè)置為合適的值即可。
默認(rèn)值為 NO。
NSExceptionRequiresForwardSecrecy 無(wú) Boolean 非必填項(xiàng),用來(lái)表示是否要求服務(wù)器支持正向保密。如果確定域名足夠安全,可以使用這個(gè)鍵。
默認(rèn)值為 YES,即將符合要求的加密算法限制在ATS Configuration Basics中。
設(shè)置為 NO,則可以接受以下加密算法形式:<li>TLS_RSA_WITH_AES_256_GCM_SHA384<li>TLS_RSA_WITH_AES_128_GCM_SHA256<li>TLS_RSA_WITH_AES_256_CBC_SHA256<li>TLS_RSA_WITH_AES_256_CBC_SHA<li>TLS_RSA_WITH_AES_128_CBC_SHA256<li>TLS_RSA_WITH_AES_128_CBC_SHA
NSExceptionMinimumTLSVersion 無(wú) String 非必填項(xiàng),用來(lái)表示可用的 TLS 最低版本。如果確定域名足夠安全,可以使用這個(gè)鍵。
使用這個(gè)鍵將引發(fā) App Store 的審核,開發(fā)者必須說(shuō)明原因。
可用的值有:<li>TLSv1.0<li>TLSv1.1<li>TLSv1.2
默認(rèn)值為 TLSv1.2。

ATS Examples / ATS 配置實(shí)例

下面介紹NSAppTransportSecurity的常見配置:

針對(duì)特定服務(wù)器使用 HTTP 連接

不影響整體 ATS 策略,只針對(duì)特定服務(wù)器進(jìn)行不安全的網(wǎng)絡(luò)請(qǐng)求——例如,從圖片服務(wù)器請(qǐng)求圖片——可在Info.plist中做如下配置:

NSAppTransportSecurity
    NSExceptionDomains
        "media-server.example.com"
            NSExceptionAllowsInsecureHTTPLoads = YES

重要:使用上述配置之前,請(qǐng)注意其可能帶來(lái)的潛在威脅。例如,通過(guò) HTTP 連接從服務(wù)器獲取媒體資源,可能帶來(lái)如下風(fēng)險(xiǎn):

  • 攻擊者可以獲悉用戶所訪問(wèn)的媒體資源內(nèi)容
  • 加大了 app 的受攻擊面,攻擊者可以通過(guò)惡意文件使得緩沖區(qū)溢出,從而造成 app 異常
針對(duì)特定服務(wù)器降低安全防護(hù)等級(jí)

不影響整體 ATS 策略,只針對(duì)特定服務(wù)器降低 HTTPS 的安全等級(jí)——包括使用較老版本的 TLS / SSL 協(xié)議,不支持正向保密——可在Info.plist中做如下配置:

NSAppTransportSecurity
    NSExceptionDomains
        "less-secure.example.com"
            NSExceptionRequiresForwardSecrecy = NO
            NSExceptionMinimumTLSVersion = "TLSv1.0"

針對(duì)受控服務(wù)器使用 HTTPS 連接,其他服務(wù)器使用 HTTP 連接

假設(shè)正在開發(fā)一款瀏覽器應(yīng)用,需要能夠讓用戶訪問(wèn)任意 URL。這種情況下,開發(fā)者應(yīng)該針對(duì)受控服務(wù)器使用安全連接,例如用于發(fā)布 app 更新的服務(wù)器。

為了能夠讓針對(duì)受控服務(wù)器的訪問(wèn)享受 ATS 保護(hù),同時(shí)保證其他不安全訪問(wèn)可用,可在Info.plist中做如下配置:

NSAppTransportSecurity
    NSExceptionDomains
        "domain-i-control.example.com"
            NSExceptionAllowsInsecureHTTPLoads = NO
            NSExceptionRequiresForwardSecrecy = YES
            NSExceptionMinimumTLSVersion = "TLSv1.2"
        "other-domain-i-control.example.com"
            NSExceptionAllowsInsecureHTTPLoads = NO
            NSExceptionRequiresForwardSecrecy = YES
            NSExceptionMinimumTLSVersion = "TLSv1.2"
    NSAllowsArbitraryLoads = YES

Debugging ATS Connections / ATS Debugging 相關(guān)

暫略

Using the nscurl Tool to Diagnose ATS Connection Issues / 使用 nscurl 工具診斷 ATS 相關(guān)問(wèn)題

暫略

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. HTTPS 其實(shí)HTTPS從最終的數(shù)據(jù)解析的角度,與HTTP沒(méi)有任何的區(qū)別,HTTPS就是將HTTP協(xié)議數(shù)據(jù)...
    獨(dú)酌丿紅顏閱讀 3,780評(píng)論 4 122
  • iOS 10 適配 ATS 一. HTTPS 其實(shí)HTTPS從最終的數(shù)據(jù)解析的角度,與HTTP沒(méi)有任何的區(qū)別,HT...
    made_China閱讀 1,792評(píng)論 0 12
  • iOS 10 適配 ATS 一. HTTPS其實(shí)HTTPS從最終的數(shù)據(jù)解析的角度,與HTTP沒(méi)有任何的區(qū)別,HTT...
    lanceChris閱讀 1,172評(píng)論 0 0
  • 說(shuō)明:文章中部分內(nèi)容參考了網(wǎng)絡(luò)資源,如cocoaChina中的文章。 App Transport Security...
    8546ed36e321閱讀 4,471評(píng)論 2 5
  • 人生有三種考試 第一種考試,既有問(wèn)題又有標(biāo)準(zhǔn)答案 第二種考試,有問(wèn)題但沒(méi)有標(biāo)準(zhǔn)答案 第三種考試,沒(méi)有問(wèn)題更沒(méi)有標(biāo)準(zhǔn)...
    琉璃君莫笑閱讀 896評(píng)論 1 2

友情鏈接更多精彩內(nèi)容