使用AFNetworking訪問網(wǎng)絡(luò)究流,發(fā)現(xiàn)網(wǎng)絡(luò)訪問失敗。輸出錯(cuò)誤信息:
The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
Google后查證榆纽,iOS9引入了新特性App Transport Security (ATS)仰猖。詳情:App Transport Security (ATS)
新特性要求App內(nèi)訪問的網(wǎng)絡(luò)必須使用HTTPS協(xié)議。但是現(xiàn)在公司的項(xiàng)目使用的是HTTP協(xié)議奈籽,使用私有加密方式保證數(shù)據(jù)安全〖⑶郑現(xiàn)在也不能馬上改成HTTPS協(xié)議傳輸。
最終找到以下解決辦法:
在Info.plist中添加NSAppTransportSecurity類型Dictionary衣屏。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean值設(shè)為YES
看到很多同學(xué)修改后還是不能用:
按照上面提到的方式添加信息,正確的修改會看到下圖這個(gè)樣子狼忱,注意類型NSAppTransportSecurity為Dictionary膨疏,NSAllowsArbitraryLoads
注意: 單元測試下面也有一個(gè)Info.plist饲帅,修改那個(gè)文件是沒有作用的!
補(bǔ)充說明
上面介紹的方法雖然解決了網(wǎng)絡(luò)訪問的問題,但是蘋果提供的安全保障也被關(guān)閉了洒闸。不過染坯,按照國內(nèi)的現(xiàn)狀均芽,關(guān)閉這個(gè)限制也許是更實(shí)際的做法丘逸。至于原因就太多了,第三方SDK(幾乎都是訪問HTTP)掀宋,合作伙伴接入(不能要求它們一定要支持HTTPS)深纲。如果你的App沒有受到這些原因的限制,還是更建議你增加HTTPS支持劲妙,而不是關(guān)閉限制湃鹊。請大家根據(jù)項(xiàng)目的實(shí)際情況作調(diào)整。出于安全考慮我們提倡使用HTTPS镣奋,退而求其次币呵,優(yōu)先考慮使用例外:將允許訪問的域加入到配置列表中,對于實(shí)在不支持HTTPS的侨颈,應(yīng)該首先考慮添加例外余赢。
添加例外的方式也很簡單:左鍵Info.plist
選擇open with source code然后添加類似如下的配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>qq.com</key>
<dict>
<key>NSIncludesSubdomains</key> <true/>
</dict>
<key>sina.com.cn</key>
<dict>
<key>NSIncludesSubdomains</key> <true/>
</dict>
</dict>
</dict>
根據(jù)自己需要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思哈垢。
參考:
App Transport Security support aka apps on iOS 9 don't work #4560
7.11_networking_with_nsurlsession.pdf
總結(jié):
蘋果正在加大應(yīng)用安全的管控妻柒,這個(gè)舉措可以看出蘋果對信息安全的重視,也暴露出大部分應(yīng)用傳輸數(shù)據(jù)時(shí)都是未經(jīng)過加密的耘分,或使用私有方式加密举塔,以至于蘋果開始對開發(fā)者提出要求。私有加密雖然一定程度上是安全的求泰,但是終究不是一個(gè)長久之計(jì)央渣。全世界這么多安全專家在維護(hù)HTTPS安全,早日使用HTTPS確保信息安全才是王道渴频!也省去了私有加密協(xié)議的安全隱患芽丹!