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 的審查,開發者必須說明原因。
- 設置為 YES,解除整個 app 的 ATS 限制;但是,通過
-
NSAllowsArbitraryLoadsInMedia
- 設置為 YES,解除通過 AV Foundation 框架訪問媒體內容時的 ATS 限制;啟用這個鍵,務必確保載入的媒體內容已經被加密,例如受
FairPlay
保護的文件,或者是安全的HLS
流媒,其中不包含敏感的個人信息。默認為 NO。
- 設置為 YES,解除通過 AV Foundation 框架訪問媒體內容時的 ATS 限制;啟用這個鍵,務必確保載入的媒體內容已經被加密,例如受
-
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。
- 設置為 YES,將驗證域名服務器證書的
- NSIncludesSubdomains
- 代表想要配置的特定域名。可以添加多個域名(即添加多個這樣的鍵),為它們統一配置 ATS 策略。這個鍵對應一個字典,包含以下子鍵:
原鏈接:http://www.jianshu.com/p/1ec3fa1ec00f