從HTTP到HTTPS再到HSTS,你了解多少?
近些年,隨著域名劫持、信息泄漏等網(wǎng)絡(luò)安全事件的頻繁發(fā)生,網(wǎng)站安全也變得越來越重要,也促成了網(wǎng)絡(luò)傳輸協(xié)議從 HTTP 到 HTTPS 再到 HSTS 的轉(zhuǎn)變。
HTTP
HTTP(超文本傳輸協(xié)議) 是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP 是互聯(lián)網(wǎng)數(shù)據(jù)通信的基礎(chǔ)。它是由萬維網(wǎng)協(xié)會(huì)(W3C)和互聯(lián)網(wǎng)工程任務(wù)組(IETF)進(jìn)行協(xié)調(diào)制定了 HTTP 的標(biāo)準(zhǔn),最終發(fā)布了一系列的 RFC,并且在1999年6月公布的 RFC 2616,定義了 HTTP 協(xié)議中現(xiàn)今廣泛使用的一個(gè)版本——HTTP 1.1。
HTTP 訪問過程
HTTP 屬于 TCP/IP 模型中的應(yīng)用層協(xié)議,當(dāng)瀏覽器與服務(wù)器進(jìn)行互相通信時(shí),需要先建立TCP 連接,之后服務(wù)器才會(huì)接收瀏覽器的請(qǐng)求信息,當(dāng)接收到信息之后,服務(wù)器返回相應(yīng)的信息。最后瀏覽器接受對(duì)服務(wù)器的信息應(yīng)答后,對(duì)這些數(shù)據(jù)進(jìn)行解釋執(zhí)行。
http 1.0 請(qǐng)求模式
HTTP 1.0 時(shí),瀏覽器每次訪問都要單獨(dú)建立連接,這會(huì)造成資源的浪費(fèi)。
后來HTTP 1.1可以在一次連接中處理多個(gè)請(qǐng)求,并且將多個(gè)請(qǐng)求重疊進(jìn)行:
http 1.1 請(qǐng)求模式
HTTP 協(xié)議特點(diǎn)
- 簡(jiǎn)單、快速、靈活:當(dāng)用戶想服務(wù)器發(fā)送請(qǐng)求時(shí),只需傳送請(qǐng)求方法和路徑即可,HTTP 允許傳輸任意類型的數(shù)據(jù)對(duì)象。并且 HTTP 協(xié)議簡(jiǎn)單易用,HTTP 服務(wù)器規(guī)模小,保證了網(wǎng)絡(luò)通信的速度;
- 無連接、無狀態(tài):HTTP協(xié)議限制每次連接只處理單個(gè)請(qǐng)求,當(dāng)服務(wù)器收到用戶請(qǐng)求后就會(huì)斷開連接,保證了傳輸時(shí)間的節(jié)省。同時(shí)HTTP協(xié)議對(duì)事務(wù)處理沒有記憶能力,如果后續(xù)的請(qǐng)求需要使用前面的信息就必須重傳數(shù)據(jù);
- 管線化和內(nèi)容編碼:隨著管線化技術(shù)的出現(xiàn),HTTP 請(qǐng)求比持久性連接速度更快,并且當(dāng)某些報(bào)文的內(nèi)容過大時(shí),為了減少傳輸?shù)臅r(shí)間,HTTP 會(huì)采取壓縮文件的方式;
- HTTP 支持客戶/服務(wù)器模式
從 HTTP 到 HTTPS
HTTP 協(xié)議由于其簡(jiǎn)單快速、占用資源少,一直被用于網(wǎng)站服務(wù)器和瀏覽器之間進(jìn)行數(shù)據(jù)傳輸。但是在數(shù)據(jù)傳輸?shù)倪^程中也存在很明顯的問題,由于 HTTP 是明文協(xié)議,不會(huì)對(duì)數(shù)據(jù)進(jìn)行任何方式的加密。當(dāng)黑客攻擊竊取了網(wǎng)站服務(wù)器和瀏覽器之間的傳輸報(bào)文的時(shí),可以直接讀取傳輸?shù)男畔?,造成網(wǎng)站、用戶資料的泄密。因此 HTTP 不適用于敏感信息的傳播,這個(gè)時(shí)候需要引入 HTTPS(超文本傳輸安全協(xié)議)。
HTTPS
HTTPS(Hypertext Transfer Protocol Secure )是一種以計(jì)算機(jī)網(wǎng)絡(luò)安全通信為目的的傳輸協(xié)議。在HTTP下加入了SSL層,從而具有了保護(hù)交換數(shù)據(jù)隱私和完整性和提供對(duì)網(wǎng)站服務(wù)器身份認(rèn)證的功能,簡(jiǎn)單來說它就是安全版的 HTTP 。
HTTP、HTTPS 差異
HTTPS 訪問過程
HTTPS 在進(jìn)行數(shù)據(jù)傳輸之前會(huì)與網(wǎng)站服務(wù)器和Web瀏覽器進(jìn)行一次握手,在握手時(shí)確定雙方的加密密碼信息。
具體過程如下:
- Web 瀏覽器將支持的加密信息發(fā)送給網(wǎng)站服務(wù)器;
- 網(wǎng)站服務(wù)器會(huì)選擇出一套加密算法和哈希算法,將驗(yàn)證身份的信息以證書(證書發(fā)布 CA 機(jī)構(gòu)、證書有效期、公鑰、證書所有者、簽名等)的形式發(fā)送給Web瀏覽器;
- 當(dāng) Web 瀏覽器收到證書之后首先需要驗(yàn)證證書的合法性,如果證書受到瀏覽器信任則在瀏覽器地址欄會(huì)有標(biāo)志顯示,否則就會(huì)顯示不受信的標(biāo)識(shí)。當(dāng)證書受信之后,Web 瀏覽器會(huì)隨機(jī)生成一串密碼,并使用證書中的公鑰加密。之后就是使用約定好的哈希算法握手消息,并生成隨機(jī)數(shù)對(duì)消息進(jìn)行加密,再將之前生成的信息發(fā)送給網(wǎng)站;
4. 當(dāng)網(wǎng)站服務(wù)器接收到瀏覽器發(fā)送過來的數(shù)據(jù)后,會(huì)使用網(wǎng)站本身的私鑰將信息解密確定密碼,然后通過密碼解密Web瀏覽器發(fā)送過來的握手信息,并驗(yàn)證哈希是否與 Web 瀏覽器一致。然后服務(wù)器會(huì)使用密碼加密新的握手信息,發(fā)送給瀏覽器;
5. 最后瀏覽器解密并計(jì)算經(jīng)過哈希算法加密的握手消息,如果與服務(wù)發(fā)送過來的哈希一致,則此握手過程結(jié)束后,服務(wù)器與瀏覽器會(huì)使用之前瀏覽器生成的隨機(jī)密碼和對(duì)稱加密算法進(jìn)行加密交換數(shù)據(jù)。
HTTPS 握手過程
HTTPS 加密算法
為了保護(hù)數(shù)據(jù)的安全,HTTPS 運(yùn)用了諸多加密算法:
1. 對(duì)稱加密:有流式、分組兩種,加密和解密都是使用的同一個(gè)密鑰。
例如:DES、AES-GCM、ChaCha20-Poly1305 等。
2. 非對(duì)稱加密:加密使用的密鑰和解密使用的密鑰是不相同的,分別稱為:公鑰、私鑰,公鑰和算法都是公開的,私鑰是保密的。非對(duì)稱加密算法性能較低,但是安全性超強(qiáng),由于其加密特性,非對(duì)稱加密算法能加密的數(shù)據(jù)長(zhǎng)度也是有限的。
例如:RSA、DSA、ECDSA、 DH、ECDHE 等。
3. 哈希算法:將任意長(zhǎng)度的信息轉(zhuǎn)換為較短的固定長(zhǎng)度的值,通常其長(zhǎng)度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等。
4. 數(shù)字簽名:簽名就是在信息的后面再加上一段內(nèi)容(信息經(jīng)過 hash 后的值),可以證明信息沒有被修改過。hash 值一般都會(huì)加密后(也就是簽名)再和信息一起發(fā)送,以保證這個(gè) hash 值不被修改。
從 HTTPS 到 HSTS
但是當(dāng)網(wǎng)站傳輸協(xié)議從 HTTP 到 HTTPS 之后,數(shù)據(jù)傳輸真的安全了嗎?
由于用戶習(xí)慣,通常準(zhǔn)備訪問某個(gè)網(wǎng)站時(shí),在瀏覽器中只會(huì)輸入一個(gè)域名,而不會(huì)在域名前面加上 http:// 或者 https://,而是由瀏覽器自動(dòng)填充,當(dāng)前所有瀏覽器默認(rèn)填充的都是http://。一般情況網(wǎng)站管理員會(huì)采用了 301/302 跳轉(zhuǎn)的方式由 HTTP 跳轉(zhuǎn)到 HTTPS,但是這個(gè)過程總使用到 HTTP 因此容易發(fā)生劫持,受到第三方的攻擊。
這個(gè)時(shí)候就需要用到 HSTS(HTTP 嚴(yán)格安全傳輸)。
HTTP 請(qǐng)求劫持
HSTS
HSTS是國(guó)際互聯(lián)網(wǎng)工程組織 IETF 正在推行一種新的 Web 安全協(xié)議,網(wǎng)站采用 HSTS 后,用戶訪問時(shí)無需手動(dòng)在地址欄中輸入 HTTPS,瀏覽器會(huì)自動(dòng)采用 HTTPS 訪問網(wǎng)站地址,從而保證用戶始終訪問到網(wǎng)站的加密鏈接,保護(hù)數(shù)據(jù)傳輸安全。
HSTS 原理
HSTS 主要是通過服務(wù)器發(fā)送響應(yīng)頭的方式來控制瀏覽器操作:
1. 首先在服務(wù)器響應(yīng)頭中添加 HSTS 響應(yīng)頭:Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]
此響應(yīng)頭只有在 https 訪問返回時(shí)才生效,其中[ ]中的參數(shù)表示可選;
2. 設(shè)置 max-age 參數(shù),時(shí)間設(shè)置不宜過長(zhǎng),建議設(shè)置時(shí)間為 6 個(gè)月;
3. 當(dāng)用戶下次使用 HTTP 訪問,客戶端就會(huì)進(jìn)行內(nèi)部跳轉(zhuǎn),并且能夠看到 307 Redirect Internel 的響應(yīng)碼;
4. 網(wǎng)站服務(wù)器變成了 HTTPS 訪問源服務(wù)器。
開啟 HSTS 后網(wǎng)站可以有效防范中間人的攻擊,同時(shí)也會(huì)省去網(wǎng)站 301/302 跳轉(zhuǎn)花費(fèi)的時(shí)間,大大提升安全系數(shù)和用戶體驗(yàn)。
開啟 HSTS 后網(wǎng)站安全系數(shù)檢測(cè)測(cè)評(píng)
開啟 HSTS 以后,可以到 ssllabs 進(jìn)行測(cè)試,網(wǎng)站的安全等級(jí)會(huì)進(jìn)一步提升。
開啟前等級(jí)為:A
開啟后等級(jí)變?yōu)椋篈+
總結(jié)
從 HTTP 到 HTTPS 再到 HSTS,網(wǎng)站的安全系數(shù)一直在上升,防止 DNS 劫持、數(shù)據(jù)泄密的力度也再加大。國(guó)內(nèi)公有云服務(wù)商比如又拍云提供了完整的 HTTPS和HSTS的解決方案,不僅支持 SSL 證書快速申請(qǐng),HTTPS 一鍵部署,還支持一鍵開啟 HSTS,感興趣的同學(xué)可以前往又拍云官網(wǎng)了解。
參考資料來源:
- HTTPS 原理詳解
- 減少網(wǎng)站跳轉(zhuǎn)時(shí)間,增強(qiáng)網(wǎng)站數(shù)據(jù)安全——HSTS 詳解
- HTTP請(qǐng)求流程(一)----流程簡(jiǎn)介
- HTTP協(xié)議詳解