iOS9種關於App Transport Security詳細說明

1、ios9更新介紹

      因爲有開發者賬號在apple提供iOS 9beta 測試版,就馬上更新iOS9,期間發現許多應用用不了,一打開就閃退或者更本連接不上網絡。有種白老鼠的心情。這其中主要原因是iOS9系統的更新,開發的應用需要進行處理以適配iOS9。另外我也 更新了最新版的xcode以及osx ei cation,由其在新版本xcode下打開原來的代碼,發現代碼有許多地方報錯,這個庫不支持,這其中就需要對工程進行設置。要適配iOS9有兩個大方向需要注意,一個是app transport security 另外一個需要注意的是app thinning ,這裏談一下app transport security 。

   在新ios9 運行帶網絡請求的應用時會報錯:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 

[20606:405724] 請求錯誤信息_: Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x7fc992c6e870 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." 

2、app transport securty說明

      蘋果一直致力於安全方面的考慮,通常使用ios系統比android系統更加安全也是因爲ios開發中的一些特性。現ios9更加強調客戶端與服務端連接和傳輸的安全性。

,app transport securty(ATS)蘋果建議在網絡請求中採用https協議,而且不是簡單的遵循https協議,需要符合以下要求:

    a、 要求Transport Layer  security協議版本在TLS1.2以上

    b、服務器的Cipers配置要求支持forward secrecy等

    c、證書籤名算法符合ATS要求

不遵循這些要求的服務器,會導致https服務在ios9中的連接依舊失效。

我們可以參照蘋果提供的官方指南:App  transport security Technote進行服務的升級配置以滿足ATS要求

3、ATS詳細配置

一般情況下,像一些個人開發者或者服務器暫時不具備https配置,以及引用其它外部鏈接並不支持https,蘋果讓我們可以自由靈活的配置以降低要求

開發者主要可以在應用的info.plist中添加NSAppTransportSecurity的相關配置,或者完全關閉https或者添加一些信任的地址。如下面配置:


a、設置是否允許http訪問

 <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        </dict>
NSAllowsArbitraryLoads 參數設置成true表示關閉https,支持所有的http請求。

b、配置某些網站支持http訪問

<key>NSAppTransportSecurity></key>
<dict>
  <key>NSExceptionDomains<key>//配置白名單
 <dict>
    <key>www.mywebsite.com</key>
      <dict>    
      <key>NSExceptionAllowsInsecureHttpLoads</key>//運行該域名支持http
    <false/>
     </dict>
</dict>
</dict>

上面是配置NSAppTransportSecurity NSExcetionDomations參數,用來指定某個地址的服務配置,上面設置了www.mywebsite.com域名可以支持http服務

。另外我們還可以配置某個地址支持的https服務的版本以及禁用正向加密技術 forward secrecy:http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html


c、可以對某些網站的TSL版本及forward security支持進行設置

 <key>NSAppTransportSecurity</key>
  <dict>
    <key>NSExceptionDomains</key>
      <dict>
         <key>www.otherwebsite.com</key>
          <dict>
              <key>NSExceptionMinimumTLSVersion</key>
             <string>1.1<string/>
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
      </dict>
  </dict>

上面設置 www.otherwebsite.com 這個域名可支持最小的TSL版本爲1.1同時禁用Forward security。

d、其它說明事項

另外一些 詳細的配置參數如下:

NSAllowsArbitraryLoads – 設置true即支持所有HTTP請求
NSExceptionDomains – 添加白名單
NSExceptionMinimumTLSVersion – 白名單指定域名支持的TLS版本
NSExceptionRequiresForwardSecrecy – 白名單指定域名是否支持Forward Secrecy
NSExceptionAllowsInsecureHTTPLoads – 白名單指定域名禁用ATS
NSThirdPartyExceptionMinimumTLSVersion – 白名單指定第三方服務域名最低支持的TLS版本
NSThirdPartyExceptionRequiresForwardSecrecy – 白名單指定第三方服務域名是否支持Forward Secrecy
NSThirdPartyExceptionAllowsInsecureHTTPLoads – 白名單指定第三方域名禁用ATS

NSIncludesSubdomains

NSTemporaryExceptionAllowsInsecureHTTPLoads   

NSTemporaryExceptionMinimumTLSVersion
NSTemporaryExceptionRequiresForwardSecrecy

上面的還有一些我們可以設置一些第三方域名,零時的設置,同樣也是三個方面:一個是是可以設置禁用ATS,一個是可以設置服務域名支持的最低TLS版本,一個是指定第三方服務域名是否支持Forward security。

以上是關於ios9 App  transport security 的詳細說明。

參考文檔:

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章