一. 定義
1.什么是HTTP?
HyperText Transfer Protocol,超文本傳輸協(xié)議,它是TCP/IP協(xié)議的一個(gè)應(yīng)用層協(xié)議,用來定義客戶端與服務(wù)端通訊的格式
2.什么是HTTPS?
HTTPS是HTTP的安全版,即在應(yīng)用層HTTP與傳輸層TCP之間多了一層加密層TLS/SSL。普通的HTTP通信,會(huì)直接將明文數(shù)據(jù)給到TCP進(jìn)行傳輸,而HTTPS會(huì)先將數(shù)據(jù)給到TLS/SSL進(jìn)行加密,然后將加密后的數(shù)據(jù)給到TCP進(jìn)行通信
二. HTTP與HTTPS的區(qū)別
- https協(xié)議需要到ca申請證書,一般免費(fèi)證書較少,因而需要一定費(fèi)用。
- http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
三. HTTPS的工作原理
- 客戶使用https的URL訪問Web服務(wù)器,要求與Web服務(wù)器建立SSL連接。
- Web服務(wù)器收到客戶端請求后,會(huì)將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端。
- 客戶端的瀏覽器與Web服務(wù)器開始協(xié)商SSL連接的安全等級(jí),也就是信息加密的等級(jí)。
- 客戶端的瀏覽器根據(jù)雙方同意的安全等級(jí),建立會(huì)話密鑰,然后利用網(wǎng)站的公鑰將會(huì)話密鑰加密,并傳送給網(wǎng)站。
- Web服務(wù)器利用自己的私鑰解密出會(huì)話密鑰。
- Web服務(wù)器利用會(huì)話密鑰加密與客戶端之間的通信。
四. HTTPS的優(yōu)缺點(diǎn)
1.優(yōu)點(diǎn):
- 使用HTTPS協(xié)議可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器;
- 由SSL+HTTP進(jìn)行加密傳輸,可防止數(shù)據(jù)在傳輸過程中不被竊取、改變,確保數(shù)據(jù)的完整性。
- HTTPS是現(xiàn)行架構(gòu)下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
2.缺點(diǎn)
- HTTPS協(xié)議握手階段比較費(fèi)時(shí),會(huì)使頁面的加載時(shí)間延長近50%;
- HTTPS連接緩存不如HTTP高效,會(huì)增加數(shù)據(jù)開銷和功耗;
- SSL證書需要錢,功能越強(qiáng)大的證書費(fèi)用越高,個(gè)人網(wǎng)站、小網(wǎng)站沒有必要一般不會(huì)用;
- SSL證書通常需要綁定IP,不能在同一IP上綁定多個(gè)域名;
五. SSL/TLS的協(xié)議的基本過程
- 客戶端向服務(wù)器端索要并驗(yàn)證公鑰。
- 雙方協(xié)商生成"對話密鑰"。
- 雙方采用"對話密鑰"進(jìn)行加密通信。
上面過程的前兩步,又被稱為“握手階段”
六. 握手階段的詳細(xì)過程
“握手階段”涉及四次通訊,且每次通信都是明文的
1. 客戶端發(fā)出請求(ClientHello)
客戶端向服務(wù)器發(fā)出加密通信的請求,并向服務(wù)器提供以下信息
- 支持的加密協(xié)議版本,比如TLS 1.0版
- 客戶端生成的隨機(jī)數(shù),用于稍后生成“對話密鑰”
- 支持的加密算法,比如RSA公鑰加密
- 支持的壓縮方法
2. 服務(wù)器響應(yīng)(SeverHello)
服務(wù)器收到客戶端請求后,向客戶端發(fā)出回應(yīng),回應(yīng)包含以下內(nèi)容
- 確認(rèn)使用的加密通信協(xié)議版本,如果客戶端與服務(wù)器支持的版本不一致,則關(guān)閉加密通信
- 服務(wù)器生成的隨機(jī)數(shù),用于稍后生成“對話密鑰”
- 確認(rèn)使用的加密算法,比如RSA公鑰加密
- 服務(wù)器證書
3. 客戶端回應(yīng)
客戶端收到服務(wù)器回應(yīng)后,首先驗(yàn)證證書的真實(shí)性與有效性。如果證書沒有問題,客戶端就會(huì)從證書中取出服務(wù)器的公鑰,然后向服務(wù)器發(fā)送以下信息
- 一個(gè)隨機(jī)數(shù),該隨機(jī)數(shù)用服務(wù)器公鑰加密,防止被竊聽
- 編碼改變通知,表示隨后的信息都將用雙方協(xié)商的加密算法和密鑰發(fā)送
- 客戶端握手結(jié)束通知,這一項(xiàng)也是前面發(fā)送的所有內(nèi)容的hash值,用來供服務(wù)器校驗(yàn)
4. 服務(wù)器的最后回應(yīng)
服務(wù)器收到客戶端的第三個(gè)隨機(jī)數(shù)pre-master key之后,計(jì)算生成本次會(huì)話所用的“會(huì)話密鑰”,然后向客戶端發(fā)送下面信息
- 編碼改變通知,表示隨后的信息都將用雙方協(xié)商的加密算法和密鑰發(fā)送
- 服務(wù)器握手結(jié)束通知,這一項(xiàng)也是前面發(fā)送的所有內(nèi)容的hash值,用來供客戶端校驗(yàn)