理解SSL/TLS協議

理解SSL/TLS協議web

 

背景算法

早期咱們在訪問web時使用HTTP協議,該協議在傳輸數據時使用明文傳輸,明文傳輸帶來了如下風險:安全

  一、信息竊聽風險,第三方能夠獲取通訊內容ide

  二、信息篡改風險,第三方能夠篡改通訊內容ui

  三、身份冒充風險,第三方能夠冒充他人身份參與通訊加密

  爲了解決明文傳輸所帶來的風險,網景公司在1994年設計了SSL用於Web的安全傳輸協議,這是SSL的起源。IETF將SSL進行標準化,1999年公佈了初版TLS標準文件。隨後又公佈了 RFC 5246(2008年8月)與 RFC 6176 (2011年3月)。該協議在web中被普遍應用。spa

 

SSL/TLS協議設計

TLSTransport Layer Security,傳輸層安全協議),及其前身SSL(Secure Sockets Layer,安全套接層)是一種安全協議,目的是爲互聯網通訊,提供安全及數據完整性保障。xml

  TLS協議使用如下三種機制爲信息通訊提供安全傳輸:blog

  一、隱祕性,全部通訊都經過加密後進行傳播

  二、身份認證,經過證書進行認證

  三、可靠性,經過校驗數據完整性維護一個可靠的安全鏈接

  

工做機制:

  TLS協議由兩部分組成,包括(TLS Record Layer,TLS handshake protocol)

  Record Layer:

    爲每條信息提供一個header和在尾部生成一個從Message Authentication Code (MAC) 獲得的hash值,其中header由5 bytes組成,分別是協議說明(1bytes),協議版本(2bytes)和長度(2bytes),跟在header後面的協議信息長度不得超過16384bytes。

 

  Handshake Protocol

    開始一個安全鏈接須要客戶端和服務端通過反覆的創建握手。一個TLS握手須要通過以下幾個步驟:

  

 

圖片來源:http://www.esds.co.in/blog/wp-content/uploads/2015/11/ssl_handcheck2-660x787.png

 

  首先仍是要通過TCP三次握手創建鏈接,而後纔是TLS握手的開始:

  ClientHello:Client端將本身的TLS協議版本,加密套件,壓縮方法,隨機數,SessionID(未填充)發送給Server端

  ServerHello:Server端將選擇後的SSL協議版本,壓縮算法,密碼套件,填充SessionID,生成的隨機數等信息發送給Client端

  ServerCertificates:Server端將本身的數字證書(包含公鑰),發送給Client端。(證書須要從數字證書認證機構(CA)申請,證書是對於服務端的一種認證),若要進行更爲安全的數據通訊,Server端還能夠向Client端發送Cerficate Request來要去客戶端發送對方的證書進行合法性的認證。

  ServerHelloDone:當完成ServerHello後,Server端會發送Server Hello Done的消息給客戶端,表示ServerHello 結束了。

  ClientKeyExchage:當Client端收到Server端的證書等信息後,會先對服務端的證書進行檢查,檢查證書的完整性以及證書跟服務端域名是否吻合,而後使用加密算法生成一個PreMaster Secret,並經過Server端的公鑰進行加密,而後發送給Server端。

  ClientFinishd:Client端會發送一個ChangeCipherSpec(一種協議,數據只有一字節),用於告知Server端已經切換到以前協商好的加密套件的狀態,準備使用以前協商好的加密套件加密數據並進行傳輸了。而後使用Master Secret(經過兩個隨機數、PreMaster Secret和加密算法計算得出)加密一段Finish的數據傳送給服務端,此數據是爲了在正式傳輸應用數據以前對剛剛握手創建起來的加解密通道進行驗證。

  Server Finishd:Sever端在接收到Client端傳過來的加密數據後,使用私鑰對這段加密數據進行解密,並對數據進行驗證,而後會給客戶端發送一個ChangeCipherSpec,告知客戶端已經切換到協商過的加密套件狀態,準備使用加密套件加密數據並傳輸了。以後,服務端也會使用Master Secret加密一段Finish消息發送給客戶端,以驗證以前經過握手創建起來的加解密通道是否成功。

  根據以前的握手信息,若是客戶端和服務端都能對Finish信息進行正常加解密且消息正確的被驗證,則說明握手通道已經創建成功。

  接下來,雙方全部的通訊數據都經過Master Secret進行加密後傳輸。    

   

 參考:

https://en.wikipedia.org/wiki/Transport_Layer_Security

https://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029

https://support.microsoft.com/en-us/kb/257591

相關文章
相關標籤/搜索