ios9把所有的http請求都改為https了:ios9系統發送的網絡請求将統一使用tls 1.2 ssl。采用tls 1.2 協定,目的是 強制增強資料通路安全,而且 系統 foundation 架構下的相關網絡請求,将不再預設使用 http 等不安全的網絡協定,而預設采用 tls 1.2。伺服器是以需要更新,以解析相關資料。如不更新,可通過在 info.plist 中聲明,倒退回不安全的網絡請求。
在讨論之前,跟往常一樣,先說下ios程式猿們最關心的問題:
跟我有毛關系?需要我加班嗎?!
首先咱們來看下業内對apple這一做法的評論:
這是某社交app上讨論,看來業内還是吐槽聲和肯定聲同在。
結論是:
跟你很有關系,加班吧,少年!
書歸正傳【嚴肅臉】,我們正式讨論下 what,why,how:
what(什麼是ssl/tls?跟http和https有什麼關系)
why(以前的http不是也能用嗎?為什麼要用ssl/tls,閑得慌?!apple是不是又在反人類?)
how(如何适配?---弱弱地問下:加班要多久?)
跟往常一樣,先說結論:
1
<code>http+ssl/tls+tcp = https</code>
tls 是 ssl 新的别稱。舉個例子:
“tls1.0”之于“ssl3.1”,猶“公元2015”之于“民國104”,或者是“一千克”之于“一公斤”,或者是“半斤”之于“八兩”:稱呼不同,但意思相同。
ssl 3.0版本之後的疊代版本被重新命名為tls 1.0,
也就是說:
<code>tls 1.0 = ssl 3.1</code>
是以他們是一個東西,我們平常也經常簡單見到 “ssl/tls” 這種說法。
常用的是下面這些:
ssl 2.0
ssl 3.0
tls 1.0 (ssl 3.1)
tls 1.1 (ssl 3.1)
tls 1.2 (ssl 3.1)
那為什麼标題是“使用https”而沒有提及ssl和tls什麼事? 要了解這個,要看下一個公式:
打個比方:如果原來的 http 是塑膠水管,容易被戳破;那麼如今新設計的 https 就像是在原有的塑膠水管之外,再包一層金屬水管。一來,原有的塑膠水管照樣運作;二來,用金屬加強了之後,不容易被戳破。
目前,應用最廣泛的是tls 1.0,接下來是ssl 3.0。但是,主流浏覽器都已經實作了tls 1.2的支援。
apple讓你的http采用ssl/tls協定,就是讓你從http轉到https
不使用ssl/tls的http通信,就是不加密的通信!
所有資訊明文傳播,帶來了三大風險:
竊聽風險(eavesdropping):第三方可以獲知通信内容。
篡改風險(tampering):第三方可以修改通信内容。
冒充風險(pretending):第三方可以冒充他人身份參與通信。
ssl/tls協定是為了解決這三大風險而設計的,希望達到:
所有資訊都是加密傳播,第三方無法竊聽。
具有校驗機制,一旦被篡改,通信雙方會立刻發現。
配備***書,防止身份被冒充。
正如文章開頭所說:
tls 1.2 協定 強制增強資料通路安全 系統 foundation 架構下的相關網絡請求,将不再預設使用 http 等不安全的網絡協定,而預設采用 tls 1.2。伺服器是以需要更新,以解析相關資料。如不更新,可通過在 info.plist 中聲明,倒退回不安全的網絡請求。
方案一:立即讓公司的服務端更新使用tls 1.2
方案二:雖apple不建議,但可通過在 info.plist 中聲明,倒退回不安全的網絡請求依然能讓app通路指定http,甚至任意的http,
具體做法見gif圖,示例demo見 demo1
正如 apple官方文檔 所說 :
info.plist 配置中的xml源碼如下所示:
上面是比較嚴謹的做法,指定了能通路哪些特定的http。當然也有暴力的做法: 徹底倒退回不安全的http網絡請求,能任意進行http請求,比如你在開發一款浏覽器app,或者你想偷懶,或者背景想偷懶,或者公司不給你更新伺服器。。。
聲明:目前apple的官方文檔并未提及如何在 info.plist 配置,我将密切關注官方文檔,如有提及,再來更新本文 .