iOS9 & iOS10 HTTP 不能正常使用的解決辦法

今天升級Xcode 7.0 bata發(fā)現(xiàn)網(wǎng)絡(luò)訪問失敗。

輸出錯誤信息

The resource couldnotbe loaded becausetheApp Transport Security policy requirestheuseofasecure connection.

Google后查證,iOS9引入了新特性App Transport Security (ATS)。詳情:App Transport Security (ATS)

新特性要求App內(nèi)訪問的網(wǎng)絡(luò)必須使用HTTPS協(xié)議。

但是現(xiàn)在公司的項目使用的是HTTP協(xié)議,使用私有加密方式保證數(shù)據(jù)安全。現(xiàn)在也不能馬上改成HTTPS協(xié)議傳輸。

最終找到以下解決辦法:

在Info.plist中添加NSAppTransportSecurity類型Dictionary。

在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設(shè)為YES

看到很多同學(xué)修改后還是不能用添加一下截圖:

在Filter中搜索Info.plist,選擇Info.plist進(jìn)行編輯

按照上面提到的方式添加信息,正確的修改會看到下圖這個樣子,注意類型NSAppTransportSecurity為Dictionary,NSAllowsArbitraryLoads為Boolean,復(fù)制粘貼的時候,不要多了空格,segment fault 頁面上直接復(fù)制,經(jīng)常會多一個出空格!

注意??,單元測試下面也有一個Info.plist,修改那個文件是沒有作用的!

補充說明

上面介紹的方法雖然解決了網(wǎng)絡(luò)訪問的問題,但是蘋果提供的安全保障也被關(guān)閉了。

不過,按照國內(nèi)的現(xiàn)狀,關(guān)閉這個限制也許是更實際的做法。

至于原因就太多了,第三方SDK(幾乎都是訪問HTTP),合作伙伴接入(不能要求它們一定要支持HTTPS)。

如果你的App沒有受到這些原因的限制,還是更建議你增加HTTPS支持,而不是關(guān)閉限制。

請大家根據(jù)項目的實際情況作調(diào)整。

出于安全考慮我們提倡使用HTTPS,退而求其次,優(yōu)先考慮使用例外:將允許訪問的域加入到配置列表中

@banxi1988 補充了配置的方法

對于實在不支持HTTPS的應(yīng)該首先考慮添加例外

添加例外的方式也很簡單:

左鍵Info.plist選擇open with source code

然后添加類似如下的配置:

NSAppTransportSecurityNSExceptionDomainsqq.comNSIncludesSubdomainssina.com.cnNSIncludesSubdomains

根據(jù)自己需要的域名修改, NSIncludeSubdomains 顧名思義是包括子域的意思。

參考:

App Transport Security support aka apps on iOS 9 don't work #4560

711_networking_with_nsurlsession.pdf

總結(jié):

蘋果正在加大應(yīng)用安全的管控,這個舉措可以看出蘋果對信息安全的重視,也暴露出大部分應(yīng)用傳輸數(shù)據(jù)時都是未經(jīng)過加密的,或使用私有方式加密,以至于蘋果開始對開發(fā)者提出要求。

私有加密雖然一定程度上是安全的,但是終究不是一個長久之計。全世界這么多安全專家在維護(hù)HTTPS安全,早日使用HTTPS確保信息安全才是王道!也省去了私有加密協(xié)議的安全隱患!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容