參考自:
SSL/TLS四次握手過程是怎么樣的妓蛮?
HTTPS把敞、SSL、TLS三者之間的聯(lián)系和區(qū)別
一.SSL/TLS 簡介
SSL(Secure Socket Layer 安全套接層)是基于 HTTPS 下的一個協(xié)議加密層执桌,用于解決 HTTP 在傳輸數(shù)據(jù)時使用明文而導致的不安全問題鄙皇。
- SSL 是 HTTP 之下,TCP 之上的一個協(xié)議層仰挣,是基于 HTTP 標準并對 TCP 傳輸數(shù)據(jù)時進行加密,所以 HTTPS 可以想成是 HTTP+SSL 的簡稱缠沈。
- HTTPS 并不是新協(xié)議膘壶,而是讓 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信洲愤。
-
TLS 可以簡單理解為 SSL 的升級版颓芭。在SSL更新到3.0時,IETF 對 SSL3.0 進行了標準化柬赐,標準化后的更名為TLS1.0(Transport Layer Security 安全傳輸層協(xié)議)亡问,可以說 TLS 就是SSL的新版本3.1,并同時發(fā)布“RFC2246-TLS加密協(xié)議詳解”肛宋,
SSL/TLS
二州藕、SSL/TLS四次握手過程
1. 客戶端發(fā)出連接請求
客戶端先向服務器發(fā)出加密通信的 ClientHello 請求。其向服務器提供下面信息:
- 支持的協(xié)議版本酝陈,比如 TLS1.0 版本床玻;
- 支持的加密方法,比如 RSA 公鑰加密沉帮;
- 一個客戶端生成的隨機數(shù)(client random), 稍后用于生成對話密鑰(session key)锈死。隨機數(shù)(client random) 客戶端會保存,同時需要傳送給服務端穆壕,隨機數(shù)(client random) 需要跟服務端產(chǎn)生的隨機數(shù)結合起來產(chǎn)生后面要講到的 Master Secret待牵。
2. 服務器回應
服務器收到客戶端請求后,向客戶端發(fā)出回應喇勋,這叫做 Serverhello缨该。此步服務器主要做三件事:
- 確認使用的加密通信協(xié)議版本,比如TLS1.00版本茄蚯。如果游覽器與服務器支持的版本不一致压彭,服務器關閉加密通信睦优;
- 確認使用的加密方法(客戶端所支持),比如RSA公鑰加密壮不;
- 將服務器證書汗盘、非對稱加密的公鑰,以及一個隨機數(shù)(Server random)發(fā)送給客戶端
3. 客戶端回應
(1) 客戶端收到服務器回應以后询一,首先驗證服務器證書
驗證手段就是執(zhí)行如下三種檢查:
- 檢查證書是否已過期隐孽;
- 檢查證書中的域名與實際域名是否一致;
- 檢查證書是否是可信機構頒布的健蕊;
如果菱阵,上述過程中有任何一個環(huán)節(jié)發(fā)現(xiàn)問題,那么瀏覽器就會向訪問者顯示一個警告缩功,由其選擇是否還要繼續(xù)通信晴及。
(2) 驗證完證書后處理
如果證書受信任,或者是用戶接受了不受信的證書嫡锌,瀏覽器會生成一串新的隨機數(shù)(Premaster secret )虑稼,并用證書中提供的公鑰加密,發(fā)送給服務器势木。
此時蛛倦,瀏覽器會根據(jù)前三次握手中的三個隨機數(shù):
Client random
Server random
Premaster secret
通過一定的算法來生成 “會話密鑰” (Session Key),這個會話密鑰就是接下來雙方進行對稱加密解密使用的密鑰啦桌!
4. 服務端回應
- 服務端收到客戶端的回復溯壶,利用已知的加密解密方式進行解密,服務器收到客戶端的第三個隨機數(shù)( Premaster secret) 之后甫男,使用同樣的算法計算出 “會話密鑰” (Session Key)且改。
6. 握手完成后加密通信
整個握手階段全部結束后,客戶端與服務器進入加密通信查剖,就完全是使用普通的 HTTP 協(xié)議钾虐,只不過用 “會話密鑰” 加密內(nèi)容。(非對稱加密解密將不再使用笋庄,接下來完全由對稱加密接手了效扫,因為密鑰已經(jīng)安全的傳送給了通信的雙方)
三. 總結
- 客戶端請求建立 SSL 鏈接,并向服務端發(fā)送一個隨機數(shù)–Client random 和客戶端支持的加密方法直砂,比如RSA公鑰加密菌仁,此時是明文傳輸。
- 服務端回復一種客戶端支持的加密方法静暂、一個隨機數(shù)–Server random济丘、授信的服務器證書和非對稱加密的公鑰。
- 客戶端收到服務端的回復后利用服務端的公鑰,加上新的隨機數(shù)–Premaster secret 通過服務端下發(fā)的公鑰及加密方法進行加密摹迷,發(fā)送給服務器疟赊。
- 服務端收到客戶端的回復,利用已知的加解密方式進行解密峡碉,同時利用Client random近哟、Server random和Premaster secret通過一定的算法生成HTTP鏈接數(shù)據(jù)傳輸?shù)膶ΨQ加密key – session key。