App Transport Security相關說明


App Transport Security(ATS)的網絡安全機制,適用於 app 以及 app extension,默認開啟,即iOS9.0以后創建APP項目默認使用HTTPS請求。

NSAllowsArbitraryLoads是字典NSAppTransportSecurity的根鍵,默認值NO

一、如果APP 仍需使用http請求,解決方案是在Info.plist文件中將NSAllowsArbitraryLoads修改為YES。

二、如APP使用http訪問,而需要訪問某第三方時需要采用HTTPS請求或者反之,均可在NSAllowsArbitraryLoads->NSExceptionDomains里單獨對某域名進行設置

三、ATS Configuration Basics / ATS 配置基礎知識

在啟用 ATS 的情況下,所有的 HTTP 請求必須為 HTTPS連接。任何不安全的 HTTP 請求都將失敗。ATS 使用 TLS(Transport Layer Security)v1.2。

字典NSAppTransportSecurity的總體結構,所有鍵都是非必填項:

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean //默認NO,開啟ATS 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
        }
    }
}

鍵可以分為兩類:主鍵,這些鍵用來定義 app 的總體 ATS 策略(紅色部分);子鍵,即NSExceptionDomains下面的鍵,使用這些鍵針對某個域名單獨配置。

主鍵包括:

  • NSAllowsArbitraryLoads

    • 設置為 YES,解除整個 app 的 ATS 限制;但是,通過NSExceptionDomains進行的配置依然有效。默認值為 NO。
    • 注意:設置為 YES,會引發 App Stroe 的審查,開發者必須說明原因。
  • NSAllowsArbitraryLoadsInMedia

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

    • 設置為 YES,解除通過 web view 發出的網絡請求的 ATS 限制。啟用這個鍵,可以使 app 訪問任意網頁內容,但不影響 app 的總體 ATS 策略。此鍵值默認為 NO。
  • NSAllowsLocalNetworking

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

    • 為一個或多個域名單獨配置 ATS。
    • 被單獨配置的域名,默認受到完全的 ATS 限制,不管NSAllowsArbitraryLoads的值如何;需要通過子鍵,進一步配置。

子鍵 屬於NSExceptionDomains

      創建字典,針對一個或多個域名,以便進行 ATS 配置。

  這意味着之前使用主鍵所做的設置,對於這個域名來說,已經無效。

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

基於這樣的設定,可以針對域名進行 ATS 配置,增加或減少安全措施。

NSExceptionDomains字典構成:

  • <域名字符串>
    • 代表想要配置的特定域名。可以添加多個域名(即添加多個這樣的鍵),為它們統一配置 ATS 策略。這個鍵對應一個字典,包含以下子鍵:
      • NSIncludesSubdomains
        • 設置為 YES,當前域名的 ATS 策略適用於其所有子域名。默認為 NO。
      • NSExceptionAllowsInsecureHTTPLoads
        • 設置為 YES,可以同時通過 HTTP 和 HTTPS 訪問當前域名。默認為 NO。
        • 注意,配置這個鍵值,將引發 App Store 的審查,開發者必須說明原因。
      • NSExceptionMinimumTLSVersion
        • 指定 TLS 的最低版本,因此可以使用版本較低,有安全漏洞的 TLS 協議。
        • 注意,配置這個鍵值,將引發 App Store 的審查,開發者必須說明原因。
      • NSExceptionRequiresForwardSecrecy
        • 設置為 NO,允許針對當前域名使用不支持正向保密的 TLS 加密算法。默認為 YES。
      • NSRequiresCertificateTransparency
        • 設置為 YES,將驗證域名服務器證書的Certificate Transparency時間戳 。默認為 NO。

原鏈接:http://www.jianshu.com/p/1ec3fa1ec00f


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM