在iOS9中Apple新增了App Transport Security(ATS)特性盆昙,其主要目的就是規(guī)定了App與服務(wù)器通信時(shí)將默認(rèn)要求使用安全的連接焊虏,旨在提高App的安全性,APP在使用higher-level API(如NSURLConnection, NSURLSession等)進(jìn)行通信時(shí)如果不采用TLS 1.2協(xié)議進(jìn)行傳輸炼团,iOS將會(huì)報(bào)錯(cuò)疏尿。Apple推薦創(chuàng)建新的App和在更新已有的App時(shí)都應(yīng)盡快對(duì)ATS進(jìn)行適配褥琐。本文將介紹在Xcode7中對(duì)ATS進(jìn)行配置。
當(dāng)我們?cè)趇OS9下直接使用HTTP連接時(shí)贸宏,會(huì)出現(xiàn)如下錯(cuò)誤:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
Temporary exceptions can be configured via your app's Info.plist file.
如果你希望暫時(shí)不適配ATS,則可以在項(xiàng)目的info.plist中添加如下配置匹舞,使所有未特殊指定的連接都不開啟ATS特性线脚,即允許明文傳輸?shù)腍ttp連接。其中<key>NSAppTansportSecurtiy</key>
是ATS配置的根節(jié)點(diǎn)
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
如果你希望適配ATS,則需注意ATS特性有如下三個(gè)需求
- 必須要基于TLS 1.2版本進(jìn)行安全傳輸
- 加密方式必須只能是支持前向加密的方法
- 證書必須至少使用SHA256的Fingerprint和至少2048bit的RSA Key或者至少256bit的Elliptic-Curve(ECC)Key
ATS接受如下加密方法:
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
如果開啟了ATS但是訪問的安全連接不符合上述三個(gè)條件的任意一個(gè)括丁,就會(huì)報(bào)錯(cuò)伶选。可以通過在info.plist中對(duì)個(gè)別域名配置例外情況來允許非安全連接或者不完全支持ATS的安全連接构资≡纱兀可以參考如下的例子
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>wty.im</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>1.1</string>
</dict>
</dict>
</dict>
所有可以設(shè)置的參數(shù)如下:
當(dāng)NSExceptionRequiresForwardSecrecy設(shè)置為NO時(shí)己单,ATS將額外支持以下加密方法:
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
更多ATS的信息可以參考iOS Developer Library的App Transport Security Technote
本文個(gè)人博客地址: http://wty.im/2015/09/22/iOS9-ATS-Feature-and-enable-insecure-http-connection-in-xcode7/
Github: https://github.com/wty21cn/