關(guān)于 iOS 10 中 ATS 的問題

關(guān)于 iOS 10 中 ATS 的問題

原文地址:https://onevcat.com/2016/06/ios-10-ats/

PS:另外填上如何使用AFNetWorking實現(xiàn)
https:http://www.cnblogs.com/jys509/p/5001566.html

本文于 2016 年 11 月 28 日按照 Apple 最新的文檔和 Xcode 8 中的表現(xiàn)進行了部分更新怎顾。

*https證書購買:http://www.wosign.com/price_client.htm

  • WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推進網(wǎng)絡(luò)通訊安全的一個重要方式。在 iOS 9 和 OS X 10.11 中,默認情況下非 HTTPS 的網(wǎng)絡(luò)訪問是被禁止的铸题。當然,因為這樣的推進影響面非常廣涯竟,作為緩沖握截,我們可以在 Info.plist 中添加NSAppTransportSecurity字典并且將NSAllowsArbitraryLoads設(shè)置為YES來禁用 ATS。相信大家都已經(jīng)對這個非常熟悉了慰毅,因為我自己也維護了一些網(wǎng)絡(luò)相關(guān)的框架,所以我還自己準備了一個小腳本來快速關(guān)閉 ATS庙睡。

  • 不過事富,WWDC 16 中技俐,Apple 表示將繼續(xù)在 iOS 10 和 macOS 10.12 里收緊對普通 HTTP 的訪問限制。從 2017 年 1 月 1 日起统台,所有的新提交 app 默認是不允許使用NSAllowsArbitraryLoads來繞過 ATS 限制的雕擂,也就是說,我們最好保證 app 的所有網(wǎng)絡(luò)請求都是 HTTPS 加密的贱勃,否則可能會在應(yīng)用審核時遇到麻煩井赌。

  • 現(xiàn)在 (2016-11-28),這方面的相關(guān)規(guī)定和幾個事實如下:
    默認情況下你的 app 可以訪問加密足夠強 (TLSv1.2 以上贵扰,AES-128 和 SHA-2 以及 ECDHC 等) 的 HTTPS 內(nèi)容仇穗。這對所有的網(wǎng)絡(luò)請求都有效,包括NSURLSession戚绕,通過 AVFoundation 訪問的流媒體纹坐,UIWebView以及WKWebView等。

  • 你依然可以添加NSAllowsArbitraryLoads為YES來全面禁用 ATS舞丛,不過如果你這么做的話耘子,需要在提交 app 時進行說明,為什么需要訪問非 HTTPS 內(nèi)容球切。一般來說谷誓,可能簡單粗暴地開啟這個選項,而又無法找到正當理由的 app 會難以通過審核吨凑。

  • 相比于使用NSAllowsArbitraryLoads將全部 HTTP 內(nèi)容開放捍歪,選擇使用NSExceptionDomains來針對特定的域名,通過設(shè)定該域名下的NSExceptionAllowsInsecureHTTPLoads來開放 HTTP 應(yīng)該要相對容易過審核鸵钝〔诰剩“需要訪問的域名是第三方服務(wù)器,他們沒有進行 HTTPS 對應(yīng)”會是審核時的一個可選理由蒋伦,但是這應(yīng)該只需要針對特定域名弓摘,而非全面開放。如果訪問的是自己的服務(wù)器的話痕届,可能這個理由會無法通過韧献。

  • 對于網(wǎng)頁瀏覽和視頻播放的行為,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent和NSAllowsArbitraryLoadsForMedia鍵研叫。通過將它們設(shè)置為YES锤窑,可以讓你的 app 中的UIWebView、WKWebView或者使用AVFoundation播放的在線視頻不受 ATS 的限制嚷炉。雖然依然需要在審核時進行說明渊啰,但這也應(yīng)該是絕大多數(shù)使用了相關(guān)特性的 app 的首選。壞消息是這個鍵在 iOS 9 中并不會起作用。

總結(jié)一下就是以下兩點:

對于 API 請求绘证,基本上是必須使用 HTTPS 的隧膏,特別是如果你們自己可以管理服務(wù)器的話∪履牵可能需要后端的同學盡快升級到 HTTPS (不過話說雖然是用 Let's Encrypt 的胞枕,我一個個人博客都啟用 HTTPS 了,作為 API 的用戶服務(wù)器魏宽,還不開 HTTPS 真有點說不過去)腐泻。如果使用的是第三方的 API,而他們沒有提供 HTTPS 支持的話队询,需要在NSExceptionDomains中進行添加派桩。

如果你的 app 只支持 iOS 10,并且有用戶可以自由輸入網(wǎng)址進行瀏覽的功能蚌斩,或者是在線視頻音頻播放功能的話铆惑,只加入NSAllowsArbitraryLoadsInWebContent或/和NSAllowsArbitraryLoadsForMedia,并且將組件換成UIWebView或WKWebView凳寺,以及AVFoundation中的 player 就可以了鸭津。如果你還需要支持 iOS 9彤侍,并且需要訪問網(wǎng)頁和視頻的話肠缨,可能只能去開啟NSAllowsArbitraryLoads然后提交時進行說明,并且看 Apple 審核員的臉色決定讓不讓通過了盏阶。除了WKWebKit以外晒奕,另外一個訪問網(wǎng)頁的選擇是使用SFSafariViewController。因為其實SFSafariViewController就是一個獨立于 app 的 Safari 進程名斟,所以它完全不受 ATS 的限制脑慧。
如果你需要使用內(nèi)網(wǎng),可以設(shè)置NSAllowsLocalNetworking砰盐,而不必擔心 SSL 連接的問題闷袒。

另外,當NSAllowsArbitraryLoads和NSAllowsArbitraryLoadsInWebContent或NSAllowsArbitraryLoadsForMedia同時存在時岩梳,根據(jù)系統(tǒng)不同囊骤,表現(xiàn)的行為也會不一樣。簡單說冀值,iOS 9 只看NSAllowsArbitraryLoads也物,而 iOS 10 會優(yōu)先看InWebContent和ForMedia的部分。在 iOS 10 中列疗,要是后兩者存在的話滑蚯,在相關(guān)部分就會忽略掉NSAllowsArbitraryLoads;如果不存在,則遵循NSAllowsArbitraryLoads的設(shè)定告材。

說起來可能有點復(fù)雜坤次,我在這里總結(jié)了一下根據(jù)NSAppTransportSecurity中設(shè)定條件不同,所對應(yīng)的系統(tǒng)版本和請求組件的行為的不同斥赋,可以作為你設(shè)置這個字典時的參考 (表中使用了NSAllowsArbitraryLoadsInWebContent作為例
子.

作為參考浙踢,這里將有效的NSAppTransportSecurity字典結(jié)構(gòu)也一并附上:

NSAppTransportSecurity : 
Dictionary {  
  NSAllowsArbitraryLoads  :Boolean
  NSAllowsArbitraryLoadsForMedia :Boolean
  NSAllowsArbitraryLoadsInWebContent :Boolean
  NSAllowsLocalNetworking :Boolean
  NSExceptionDomains : 
   Dictionary {:
 Dictionary {              
NSIncludesSubdomains : Boolean            NSExceptionAllowsInsecureHTTPLoads : Boolean            NSExceptionMinimumTLSVersion : String            NSExceptionRequiresForwardSecrecy : Boolean 
 // Default value is YES          
  NSRequiresCertificateTransparency : Boolean  
      }  
  }
}
  • 不得不說,Apple 使用自己現(xiàn)在的強勢地位灿渴,在推動技術(shù)進步上的做的努力是有目共睹的洛波。不論是前幾天強制支持 IPv6,還是現(xiàn)在的
    HTTPS骚露,其實都不是很容易就能作出的決定蹬挤。而為用戶構(gòu)建一個更安全的使用環(huán)境,可能不僅是 Apple
    單方面可以做的棘幸,也是需要開發(fā)者來配合的一件事情焰扳。盡快適配更進步和安全的使用方式,會是一件雙贏的事情误续。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吨悍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹋嵌,更是在濱河造成了極大的恐慌育瓜,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栽烂,死亡現(xiàn)場離奇詭異躏仇,居然都是意外死亡,警方通過查閱死者的電腦和手機腺办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門焰手,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怀喉,你說我怎么就攤上這事书妻。” “怎么了躬拢?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵躲履,是天一觀的道長。 經(jīng)常有香客問我估灿,道長崇呵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任馅袁,我火速辦了婚禮域慷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己犹褒,他們只是感情好抵窒,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叠骑,像睡著了一般李皇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宙枷,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天掉房,我揣著相機與錄音,去河邊找鬼慰丛。 笑死卓囚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诅病。 我是一名探鬼主播哪亿,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贤笆!你這毒婦竟也來了蝇棉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤芥永,失蹤者是張志新(化名)和其女友劉穎篡殷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恤左,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡贴唇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了飞袋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡链患,死狀恐怖巧鸭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情麻捻,我是刑警寧澤纲仍,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站贸毕,受9級特大地震影響郑叠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜明棍,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一乡革、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦沸版、人聲如沸嘁傀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽细办。三九已至,卻和暖如春蕾殴,著一層夾襖步出監(jiān)牢的瞬間笑撞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工钓觉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娃殖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓议谷,卻偏偏與公主長得像炉爆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卧晓,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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