一、前言
1> 隨著互聯(lián)網(wǎng)、特別是移動互聯(lián)網(wǎng)的爆炸式發(fā)展,我們的生活已經(jīng)和網(wǎng)絡(luò)有了千絲萬縷的關(guān)系,于是'網(wǎng)絡(luò)安全問題'就越來越受到人們的關(guān)注。
2> 我們已知,百度已經(jīng)上線了全站'HTTPS' 的安全搜索,默認情況下,就會將 HTTP請求 轉(zhuǎn)成 HTTPS請求。
3> 在 iOS 開發(fā)中,從 iOS 9.0 開始,蘋果也引入了 ATS (App Transport Security 應(yīng)用傳輸安全),App Transport Security 的目標(biāo)是提高 Apple 操作系統(tǒng)的安全性以及在此操作系統(tǒng)上運行的任何應(yīng)用的安全性。
4> ATS要求應(yīng)用程序在進行網(wǎng)絡(luò)傳輸?shù)臅r候,自動通過 HTTPS 傳輸而不是 HTTP。
二、HTTPS協(xié)議概述
2.1 簡述
1> '兩個名詞': 'SSL'(Secure Sockets Layer 安全套接層) 和 'TLS'(Transport Layer Security 傳輸層安全)。
2> HTTPS 可以認為是 HTTP + SSL/TLS。
3> TLS 是 '傳輸層' 加密協(xié)議,它的前身是 SSL 協(xié)議,SSL協(xié)議最早是由NetScape(網(wǎng)景)公司于1995年發(fā)布,1999年經(jīng)過IETF((The Internet Engineering Task Force 國際互聯(lián)網(wǎng)工程任務(wù)組)討論和規(guī)范后,改名為 TLS。
4> 若沒有特別說明,SSL 和 TLS 說的都是同一個協(xié)議。
5> iOS 中,ATS 要求至少是 'TLS1.2'版本。
2.2 HTTP 和 TLS 在協(xié)議層的位置以及TLS協(xié)議的組成

TLS協(xié)議格式圖.png
1> TLS 協(xié)議主要包含5個部分: '應(yīng)用數(shù)據(jù)層協(xié)議'、'握手協(xié)議'、'報警協(xié)議'、'加密消息確認協(xié)議'、'心跳協(xié)議'。
2> TLS 協(xié)議本身又是由 record 協(xié)議傳輸?shù)?,record 協(xié)議的格式如上圖最右所示。
3> 目前常用的 HTTP 協(xié)議是 'HTTP1.1'。
4> 常用的 TLS 協(xié)議版本有: 'TLS1.2'、'TLS1.1'、'TLS1.0' 和 'SSL3.0'。
5> 'SSL3.0' 和 'TLS1.0' 都已經(jīng)被證明不安全。
6> 'TLS1.2' 和 'TLS1.1' 暫時沒有已知的安全漏洞,比較安全,同時有大量擴展提升速度和性能,推薦使用這兩個版本。
7> 需要關(guān)注一下 'TLS1.3',將會是 TLS 協(xié)議的一次重大改革。不管是安全性還是用戶訪問速度都會有質(zhì)的提升,不過目前還沒有明確發(fā)布時間。
8> 'HTTP2.0' 已經(jīng)正式定稿,這個由SPDY協(xié)議演化而來的協(xié)議相比 'HTTP1.1' 又是一個非常重大的變動,能夠明顯提升應(yīng)用層數(shù)據(jù)的傳輸效率。
* 'SPDY': 2012年,Google推出了基于TCP的應(yīng)用層協(xié)議SPDY(取speedy諧音,意謂更快),目的是為了取代'HTTP1.1'。不過'HTTP2.0'定稿后,'SPDY'退出了歷史舞臺。
三、HTTPS 功能介紹
百度使用 HTTPS 協(xié)議主要是為了保護用戶隱私、防止流量劫持。
HTTP 本身是'明文傳輸'的,沒有經(jīng)過任何安全處理。
例如:
1> 用戶在百度搜索『葵花』,中間者完全能夠查看到這個信息,并且有可能來騷擾用戶。
2> 也有用戶投訴百度,發(fā)現(xiàn)首頁或結(jié)果頁有一個很大很大的廣告,這也是中間者往頁面插的廣告。
3> 如果劫持技術(shù)比較低劣,用戶甚至無法訪問百度。
常見「中間者」主要指一些 『網(wǎng)絡(luò)節(jié)點』,是用戶數(shù)據(jù)在瀏覽器和百度服務(wù)器中間傳輸必須要經(jīng)過的節(jié)點。
常見網(wǎng)絡(luò)節(jié)點:
WIFI熱點、路由器、防火墻、反向代理、緩存服務(wù)器等。
HTTPS 協(xié)議提供了三大功能來對抗『中間者』的劫持行為
1> '內(nèi)容加密'
瀏覽器到百度服務(wù)器的內(nèi)容都是以加密形式傳輸,中間者無法直接查看原始內(nèi)容。
2> '身份認證'
保證用戶訪問的是百度服務(wù)器,即使被 DNS 劫持到了第三方站點,也會提醒用戶沒有訪問百度服務(wù)器,有可能被劫持。
3> '數(shù)據(jù)完整性'
防止內(nèi)容被第三方冒充或者篡改。