天天看點

HTTPS

ios9把所有的http請求都改為https了:ios9系統發送的網絡請求将統一使用tls 1.2 ssl。采用tls 1.2 協定,目的是 強制增強資料通路安全,而且 系統 foundation 架構下的相關網絡請求,将不再預設使用 http 等不安全的網絡協定,而預設采用 tls 1.2。伺服器是以需要更新,以解析相關資料。如不更新,可通過在 info.plist 中聲明,倒退回不安全的網絡請求。

在讨論之前,跟往常一樣,先說下ios程式猿們最關心的問題:

跟我有毛關系?需要我加班嗎?!

首先咱們來看下業内對apple這一做法的評論:

HTTPS

這是某社交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什麼事? 要了解這個,要看下一個公式:

HTTPS

打個比方:如果原來的 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

HTTPS

正如 apple官方文檔 所說 :

HTTPS
HTTPS
HTTPS

info.plist 配置中的xml源碼如下所示:

HTTPS

上面是比較嚴謹的做法,指定了能通路哪些特定的http。當然也有暴力的做法: 徹底倒退回不安全的http網絡請求,能任意進行http請求,比如你在開發一款浏覽器app,或者你想偷懶,或者背景想偷懶,或者公司不給你更新伺服器。。。

HTTPS

聲明:目前apple的官方文檔并未提及如何在 info.plist 配置,我将密切關注官方文檔,如有提及,再來更新本文 .

繼續閱讀