更安全的Web通信HTTPS
1. HTTP協議存在的問題
閱讀本篇需要對HTTP協議有最基本的了解。 借用《圖解密碼技術》里的圖片,我們以如下一個購物場景開始介紹:
在網購過程中,如果使用純粹的HTTP協議,那么用戶的賬號密碼,信用卡,銀行卡信息都將在信息傳輸過程中直接裸奔。從例子中我們可以看到信用卡信息直接被明文傳輸了。除了明文傳輸之外,還存在著以下兩個問題:常規情況下,可以對通信的內容進行加密,來避免明文傳輸的問題。但是單靠這點,無法解決信息完整性和認證問題。為了解決這些問題,需要對通信進行加密。也就引入了 HTTPS 。
2. HTTPS結構
2.1 HTTPS與HTTP
HTTPS 本身并不是一個協議,它使用 SSL/TLS 作為對通信加密的協議,承載 HTTP ,將兩種協議疊加,來實現對 HTTP 通信進行加密的目的。二者的關系為 HTTP 加密 認證 完整性保護=HTTPS 單純從層次上對比二者的差異為:
即在 HTTP 協議下又加了一層 SSL,計算機網絡通信過程的信息流動方向是發送方信息由上到下進行包裝,然后接收方將信息由下到上進行解包。上述的購物場景,如果使用了 SSL/TLS 承載 HTTP,那么通信的流程將會變化成如下圖: 無論是客戶端,還是服務端,消息發送的時候,都是從上往下,經過了 SSL/TLS 加密,然后接收的時候再由下往上解密。看到這里你可能對流程已經有所理解,但又存在疑惑: SSL/TLS 是什么東西?
2.2 SSL/TLS
SSL(Secure Socket Layer),稱為安全套接層,是1994年網景公司設計的一種安全協議,用于解決了網絡通信安全和數據完整性問題。第一個版本的TLS(Transport Layer Security) 是在 SSL3.0基礎上設計的,可以理解為 SSL 3.1。后續的 TLS 版本又加入了更多特性,可以把它理解為是 SSL 的升級版。
2.3 SSL/TLS 位于哪一層?
目前普遍的說法是 SSL/TLS 無法確切地被劃分到 OSI 或者 TCP/IP 的具體某一層。從邏輯上來講,SSL/TLS 的加密功能正好能和 OSI的表示層相對應,但是一些應用程序會把它當做傳輸層。所以比較保守的說法是SSL/TLS介于傳輸層和應用層之間。
2.4 TLS結構簡介
SSL/TLS 不僅可以承載 HTTP,也可以承載其他應用層協議。
協議本身可以分成兩層,上層是握手協議,下層是記錄協議。如下圖:
上層又分成了4個子協議,其中第一個握手協議是最重要的,它的作用是確認雙方使用的密碼套件,雙方共享密鑰,基于證書的認證操作。 其他三個子協議的作用分別是:
- 密碼規則更變協議:通知對方要交換密碼了
- 警告協議:把錯誤信息傳給對方
- 應用數據協議:將承載的數據傳達給對方
記錄協議位于下層,它的作用是使用對稱加密的方式對消息進行加密通信,過程可以再進一步細分為:
HTTPS握手過程
我們知道 HTTP 是基于 TCP 來完成的,TCP有握手過程,HTTPS同樣也有握手過程。當我們談論 HTTPS的時候,其實更側重的是談論 SSL。
默認情況下 HTTP 通信,客戶端會打開一條到服務器端口80的連接。而 HTTPS 則會打開一條到服務器端口443的連接。 TCP 連接建立后,會初始化 SSL,溝通加密參數,交換密鑰,完成握手過程后,SSL 初始化完成。然后就可以加密通信了。
我們在談論HTTPS握手過程,其實就是SSL的握手過程。這個握手過程分成4個部分。下面將詳細地解析這4個部分。
一: 客戶端 -> 服務端
客戶端向服務端發送Client Hello,告訴服務端它能理解的密碼套件(RSA/3DES等),壓縮方式,會話id,當前時間,SSL/TLS 協議的可用版本,客戶端隨機數。
二: 服務端 -> 客戶端
三: 客戶端 -> 服務端
四: 服務端 -> 客戶端
握手過程一共完成的工作有:
HTTPS 采用了混合加密機制。在握手環節使用公鑰加密方式。通信建立后,交換報文時,使用共享密鑰加密,也就是上面第3和第4點。對稱加密會比非對稱加密快很多,提高通信過程的效率。共享密鑰的生成過程,可以從這張圖中去理解。
客戶端和服務端可以擁有一樣的預備主密碼,在握手的開始階段,雙方協商了共同使用什么密碼套件。預備主密碼同時使用由密碼套件中兩個單向散列函數(MD5和SHA-1)組合的偽隨機數生成器,生成主密碼(客戶端的預備主密碼也是使用偽隨機數生成)。兩端都會根據這個一樣的預備主密碼,計算出一樣的主密碼。然后再由一樣的主密碼,生成下面三個:
- 用于對稱加密的密鑰
- 消息認證碼的密鑰
- 對稱密碼的CBC模式中使用的初始化向量
每一樣都有兩份,即客戶端發往服務端,和服務端發往客戶端。所以主密碼一共可以生成6種信息。
以上就是HTTPS握手過程的詳細解析。握手建立完成后,客戶端和服務端有擁有對稱加密的密鑰,那么就可以使用這個密鑰對通信內容進行加密了。
HTTPS相對于HTTP有什么不一樣?
總結一下,HTTPS多做了什么,它和HTTP有什么不一樣。
- HTTP是明文傳輸,HTTPS是加密傳輸
- HTTPS需要申請證書,有一定成本
- HTTP使用80端口,HTTPS使用443端口
- HTTP沒有身份認證,HTTPS有身份認證
- HTTP報文完整性無法驗證,可能被篡改。HTTPS可以驗證。
參考資料
圖解密碼技術
圖解HTTP
HTTP權威指南
Transport Layer Security
總結
以上是生活随笔為你收集整理的更安全的Web通信HTTPS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue菜鸟从业记:完成项目最后一公里之真
- 下一篇: 使用 Canvas 生成公众号头图