iOS App Transprot Security

來源:互聯網
上載者:User

標籤:

隨著iOS 9和OS X EI Capitan 的發布,蘋果官方引入了應用通訊安全模式的概念。簡而言之,應用通訊安全模式強制性要求應用需要使用最佳的安全通訊協議,比如TLS 1.2版本和前向保密技術。在不久的將來,蘋果也將更新這些最佳實務以確保他們在保障網路資料安全的潮流中走在前列。

在iOS 9 和 OS X EI Caption之後,當使用NSURLSession的時候預設會開啟ATS。然而不幸的是,對於大多數開發人員而言,這將意味著在他們基於新版本的操作系 統做開發時,情況有了很大的變化。好訊息是,蘋果官方提供了一些可選配置項來決定是否開啟ATS模式,也就是可以選擇開啟或者不開啟。

開發人員可以針對某些確定的URL不使用ATS,這需要在工程中的info.plist中標記NSExceptionDomains。在NSExceptionDomains字典中,可以顯式的指定一些不使用ATS的URL。這些你可以使用的例子可以是:

- NSIncludesSubdomains

- NSExceptionAllowInsecureHTTPLoads

- NSExceptionRequiresForwardSecrecy

- NSExceptionMinimumTLSVersion

- NSThirdPartyExceptionAllowsInsecureHTTPLoads

- NSThirdPartyExceptionMinimumTLSVersion

- NSThirdPartyExceptionRequiresForwardSecrecy

這些關鍵字使我們可以更加細緻的設定針對不使用ATS的網域名稱情況下禁用ATS或者一些特殊的ATS選項。

**在iOS 9 的beta1版本中,上述的關鍵字是錯誤的,應該使用如下關鍵字:**

- NSTemporaryExceptionAllowsInsecureHTTPLoads

- NSTemporaryExceptionRequiresForwardSecrecy

- NSTemporaryExceptionMinimumTLSVersion

- NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads

- NSTemporaryThirdPartyExceptionMinimumTLSVersion

- NSTemporaryThirdPartyExceptionRequiresForwardSecrecy

這些關鍵字在不久以後肯定會被替換掉。如果可以,你應該使用第一組的關鍵字,因為蘋果官方支援這些關鍵字。雖然你正在使用臨時的關鍵字,但它應該在將來的beta版本中還是可以繼續使用的。

下面是一些開發人員可能會在開發過程中遇到的情況。

例1 所有情況下都使用ATS

這是最簡單的情況。唯一需要做的事情就是使用NSURLSession。如果你的開發目標是iOS 9或者 OS X EI Capitan之後,ATS的最佳實務將會應用到所有基於NSURLSession的網路。

例2 特殊情況除外,都使用ATS

如 果你希望自己所有的網域名稱,除了一些已知並不會使用ATS之外的,所有通訊都使用ATS。這種情況下你可以指定一些不使用ATS的特殊情況,而其餘的情況使 用ATS。對於這種情境,可以使用*NSExceptionDomains*來標識使用ATS預設設定的域。為了篩選出所有域或者子域,可以建立一個包含 想要排除使用ATS的URL的字典,然後設定其中的*NSExceptionAllowInsecureHTTPLoads*的值為true。如果想要對 於這些域完全禁用ATS,也可以指定更多的規則來限制,如使用*NSExceptionRequiresForwardSecrecy* 和*NSExceptionMinimumTLSVersion*關鍵字。

例3 除特殊情況外,都不使用ATS

一 種與上例相反的情況,你可能進希望在你明確知道支援的域內使用ATS。比如,如果開發一個Twitter用戶端,可能需要有難以計數的可能不支援ATS的 URL需要載入,可是你希望網路狀況想發起登入請求和請求Twitter伺服器的其他請求一致。在這種情況下,你可以設定禁用ATS為預設選項,然後指定 需要使用ATS的URL。

這種情況下,需要設定*NSAllowArbitraryLoads*為true,然後 在*NSExceptionDomains*字典中定義需要保證安全性的URL。需要保證安全性的每個域都需要有自己的字典,而且字典中 的*NSExceptionAllowInsecureHTTPLoads*選項需要設定為false。

例4 低級的ATS

在 某些情況下,可能ATS用於所有情況,或者一些,或者是自有的URL,但是並未針對所有的ATS最佳實務全部支援。也許你的應用伺服器僅支援 TLS1.2,但是不支援之後的版本,與其把涉及到的所有域都設定為不用ATS,不如設定為支援版本較低的ATS。這種情境下,需要建立一 個*NSExceptionDomains*字典,這是一個對於每個域都要重用的字典選項,然後設 置*NSExceptionRequiresForwardSecrecy*值為false。類似的,如果你希望向前支援,但是需要最低版本的TLS,你 可以通過*NSExceptionMinimumTLSVersion*關鍵字定義你的應用伺服器所支援的TLS版本。

例5 NSA-friendly 模式

如果想完全不使用ATS(不建議使用這種模式,並且需要你完全理解其隱藏的危險。)你可以在info.plist中設定*NSAllowArbitraryLoads*屬性為true。

第三方索引值

你可能注意到一些關鍵字像是使用了一些其他關鍵字中的詞但是在前面加上了"ThirdParty"字樣:

- NSThirdPartyExceptionAllowsInsecureHTTPLoads

- NSThirdPartyExceptionMinimumTLSVersion

- NSThirdPartyExceptionRequiresForwardSecrecy

在功能上,這些關鍵字與不含有"ThirdParty"的關鍵字有同樣的效果。而且實際運行中所調用的代碼將會完全忽略是否使用"ThirdParty"關鍵字。你應該使用適用於你的情境的關鍵字而不必過多考慮這些。

Certificate Transparency

雖然ATS大多數安全特性都是預設可用的,Certificate Transparency 是 必須設定的。如果你有支援Certificate Transparency的認證,你可以檢查NSRequiresCertificateTransparency關鍵字來使用Certificate Transparency。再次強調,如果你的認證不支援Certificate Transparency,此項需要設定為不可用。

如果 需要調試一些由於採用了ATS而產生的問題,需要設定CFNETWORK_DIAGNOSTICS為1,這樣就會列印出包含被訪問的URL和ATS錯誤在 內的NSURLSession錯誤資訊。要確保處理了遇到的所有的錯誤訊息,這樣才能使ATS易於提高可靠性和擴充性。

以上所有資訊都 WWDC 2015 NSURLSession session 中有所體現。最後,蘋果強調需要上報開發過程所有的問題並且需要密切關注將來beta版本中的可能產生的變化。

 

適配iOS9新特性:http://www.leiphone.com/news/201509/sLMiLyOsK3qzhkRJ.html

iOS App Transprot Security

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.