TLS全稱是Transport Layer Security,是用來替代SSL的,是一種密碼協定,用來提供計算機之間互動的安全通信。主要用于https通信,也用于email,即使通信等。
TLS握手
TLS握手通常分為2種方式,一種是基本的握手(具體可參照下圖),另一種是用戶端服務端握手(因為這種用的少,就不細講)
通過上圖可知,我們這裡說的TLS握手主要講的是最基本的TLS握手,即隻使用伺服器的證書來進行加密,具體步驟如下:
1.用戶端與伺服器之間通過3次握手建立連接配接
2.協商階段
a. client發送一個ClientHello消息給server,這個消息包含了client支援的最高的TLS協定版本,一個随機數,目前client支援的密碼組清單和建議的壓縮算法
b.server發送一個ServerHello消息給client,這個消息包含了TLS協定版本,一個伺服器随機數,根據用戶端支援的密碼組清單最終選擇的密碼和最終選擇的壓縮算法。
c.server發送Certificate(證書)消息
d.server發送ServerKeyExchange消息
e.server發送ServerHelloDone消息,表明握手協商已經完成
f.client發送ClientKeyExchange消息,這個消息包含了PreMasterSecret(這個值是根據server發送的Certificate裡面的public key通過加密生成的)和 public key。(注意在發送消息之前,client會對server發送的Certificate進行驗證–可參考下面的數字證書,如果驗證失敗,則握手失敗)
g.client和server根據client的随機數,server端的随機數和PreMasterSecret計算出一個共同的密碼,這個共同的密碼叫做master secret)
3.client發送ChangeCipherSpec記錄,告訴server我後面發送的所有消息都會是加密的了
a.client發送一個已驗證并且加密的Finished消息。包含了對之前消息的hash和mac
b.server對接收的Finished消息進行解密并驗證hash和mac,如果驗證失敗,則握手失敗
4.server發送ChangeCipherSpec消息,告訴client我後面發送的所有消息都會是加密的了
a.server發送一個已驗證并且加密的Finished消息。包含了對之前消息的hash和mac
b.client 對接收的Finished消息進行解密并驗證hash和mac,如果驗證失敗,則握手失敗
5.應用階段:此階段說明TLS握手已經完成,後面所有發送的消息都會是加密的
數字證書
數字證書提供的subjectName(主題名稱)設定目前證書的所有權,将目前通路的位址與證書所有權的位址進行對比,如果一樣,則證書有效,如果不一樣,則證書無效。同時也會對證書及其父類證書已知道根證書有效期進行對比,如果不在有效期内,則證書無效。