App Transport Security

遇到的問題

剛剛寫一個簡單的獲取天氣數據的demo,進行Http請求的時候,程序報錯提示:
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.

解決方法

  1. 在Info.plist中添加 App Transport Security Settings 類型 Dictionary ;
    并在App Transport Security Settings 下添加 Allow Arbitrary Loads 類型Boolean, 值設為 YES

  2. 或者在plist source code添加

    <key>NSAppTransportSecurity</key>
    <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    </dict>

二者效果等同

解釋原因、關于ATS

簡單翻閱了Apple官方App Transport Security文檔(簡稱ATS)得知:

ATS

ATS限制使用HTTP, 數據請求盡量通過HTTPS加密傳輸,
HTTPS的請求也要滿足以下規定:

  1. 傳輸層協議(TLS)至少為1.2版本
  2. 連接的加密方式要提供Forward Secrecy,支持如下加密算法詳見蘋果官方文檔
  3. 證書至少要使用一個SHA256的指紋與任一個2048位或者更高位的RSA密鑰,或者是256位或者更高位的ECC密鑰。如果不符合其中一項,請求將被中斷并返回nil.

上面新增的配置中的NSAppTransportSecurityATS配置的根節點,配置了節點表示告訴系統要走自定義的ATS設置。而NSAllowsAritraryLoads節點則是控制是否禁用ATS特性,設置YES就是禁用ATS功能。

總結:

  • 如果請求源是HTTP,則按以上方法處理
  • 如果請求源是HTTPS,則需要根據是否滿足以上三個條件來針對性地配置plist
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容