閱讀本篇須要對HTTP協議有最基本的瞭解。 借用《圖解密碼技術》裏的圖片,咱們以以下一個購物場景開始介紹: 安全
在網購過程當中,若是使用純粹的HTTP協議,那麼用戶的帳號密碼,信用卡,銀行卡信息都將在信息傳輸過程當中直接裸奔。從例子中咱們能夠看到信用卡信息直接被明文傳輸了。除了明文傳輸以外,還存在着如下兩個問題:常規狀況下,能夠對通訊的內容進行加密,來避免明文傳輸的問題。可是單靠這點,沒法解決信息完整性和認證問題。爲了解決這些問題,須要對通訊進行加密。也就引入了 HTTPS 。服務器
HTTPS 自己並非一個協議,它使用 SSL/TLS 做爲對通訊加密的協議,承載 HTTP ,將兩種協議疊加,來實現對 HTTP 通訊進行加密的目的。兩者的關係爲 HTTP+加密+認證+完整性保護=HTTPS 單純從層次上對比兩者的差別爲: 網絡
即在 HTTP 協議下又加了一層 SSL,計算機網絡通訊過程的信息流動方向是發送方信息由上到下進行包裝,而後接收方將信息由下到上進行解包。上述的購物場景,若是使用了 SSL/TLS 承載 HTTP,那麼通訊的流程將會變化成以下圖: 不管是客戶端,仍是服務端,消息發送的時候,都是從上往下,通過了 SSL/TLS 加密,而後接收的時候再由下往上解密。看到這裏你可能對流程已經有所理解,但又存在疑惑: SSL/TLS 是什麼東西?函數
SSL(Secure Socket Layer),稱爲安全套接層,是1994年網景公司設計的一種安全協議,用於解決了網絡通訊安全和數據完整性問題。第一個版本的TLS(Transport Layer Security) 是在 SSL3.0基礎上設計的,能夠理解爲 SSL 3.1。後續的 TLS 版本又加入了更多特性,能夠把它理解爲是 SSL 的升級版。加密
目前廣泛的說法是 SSL/TLS 沒法確切地被劃分到 OSI 或者 TCP/IP 的具體某一層。從邏輯上來說,SSL/TLS 的加密功能正好能和 OSI的表示層相對應,可是一些應用程序會把它當作傳輸層。因此比較保守的說法是SSL/TLS介於傳輸層和應用層之間。計算機網絡
SSL/TLS 不只能夠承載 HTTP,也能夠承載其餘應用層協議。 設計
協議自己能夠分紅兩層,上層是握手協議,下層是記錄協議。以下圖: 3d
上層又分紅了4個子協議,其中第一個握手協議是最重要的,它的做用是確認雙方使用的密碼套件,雙方共享密鑰,基於證書的認證操做。 其餘三個子協議的做用分別是:cdn
記錄協議位於下層,它的做用是使用對稱加密的方式對消息進行加密通訊,過程能夠再進一步細分爲:blog
咱們知道 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)組合的僞隨機數生成器,生成主密碼(客戶端的預備主密碼也是使用僞隨機數生成)。兩端都會根據這個同樣的預備主密碼,計算出同樣的主密碼。而後再由同樣的主密碼,生成下面三個:
每同樣都有兩份,即客戶端發往服務端,和服務端發往客戶端。因此主密碼一共能夠生成6種信息。
以上就是HTTPS握手過程的詳細解析。握手創建完成後,客戶端和服務端有擁有對稱加密的密鑰,那麼就可使用這個密鑰對通訊內容進行加密了。
總結一下,HTTPS多作了什麼,它和HTTP有什麼不同。