1. 程式人生 > 其它 >HTTPS握手過程

HTTPS握手過程

HTTPS 即 HTTP over TLS,是一種在加密通道進行 HTTP 內容傳輸的協議。

TLS 的早期版本叫做 SSL。SSL 的 1.0, 2.0, 3.0 版本均已經被廢棄,出於安全問題考慮廣大瀏覽器也不再對老舊的 SSL 版本進行支援了,因此這裡我們就統一使用 TLS 名稱了。

所以,我們探討HTTPS的握手過程,其實就是 SSL/TLS的握手過程。
TLS旨在為Internet 提供通訊安全的加密協議。TLS握手是啟動和使用TLS加密的通訊會話的過程。在TLS握手期間,Internet中的通訊雙方會彼此交換資訊,驗證密碼套件,交換會話金鑰。
每當使用者通過HTTPS 導航到具體的網站併發送請求時,就會進行TLS握手。除此之外,每當其他任何通訊使用HTTPS(包括API呼叫和在 HTTPS上查詢DNS)時,也會發生TLS握手。

TLS通訊流程分為HTTP握手階段和TLS握手階段

TLS 的基本過程如下:

  • 在進行通訊前,首先會進行HTTP的三次握手,握手完成後,再進行TLS的握手過程

  • 客戶端傳送一個 ClientHello 訊息到伺服器端,訊息中同時包含了它的 Transport Layer Security (TLS) 版本,客戶端支援的密碼套件以及一串客戶端隨機數。

  • 伺服器端向客戶端返回:

    • ServerHello ,訊息中包含了伺服器端的 TLS 版本,伺服器所選擇的支援的密碼套件,服務端生成的隨機數;
    • server_certificates,訊息包含了伺服器端配置的證書鏈,用於身份驗證與金鑰交換。
    • server_hello_done,通知客戶端 server_hello 資訊傳送結束。
  • 客戶端根據自己的信任 CA 列表,校驗證書的合法性。

    • 合法性驗證包括如下:

      (1) 證書鏈的可信性 trusted certificate path。

      (2) 證書是否吊銷 revocation,有兩類方式離線 CRL 與線上 OCSP,不同的客戶端行為會不同。

      (3) 有效期 expiry date,證書是否在有效時間範圍。

      (4) 域名 domain,核查證書域名是否與當前的訪問域名匹配,匹配規則後續分析。

    基於公鑰證書交換公鑰的分配過程
  • 客戶端向伺服器端傳送:

    • client_key_exchange
      ,合法性驗證通過之後,客戶端計算產生隨機數字,並用證書公鑰加密,傳送給伺服器。
    • 客戶端根據自己的隨機數和伺服器端傳送來的隨機數生成對稱金鑰。
    • 客戶端將之前所有通訊引數的 hash 值用公鑰加密後傳送給伺服器端。
    • change_cipher_spec,客戶端通知伺服器使用私鑰解密訊息
  • 伺服器端向客戶端返回:

    • 伺服器端使用自己的私鑰解密訊息得到客戶端產生的隨機數,然後使用這串隨機數生成對稱金鑰
    • 伺服器端計算之前所有接收資訊的 hash 值,然後解密客戶端傳送來的資訊,檢查這兩個值是否對應,驗證資料和金鑰正確性。
    • change_cipher_spec,驗證通過後,伺服器端通知客戶端使用協商好的對稱金鑰加密訊息。
  • 從現在開始,接下來整個 TLS 會話都使用對稱祕鑰進行加密,傳輸應用層(HTTP)內容

從上面的過程可以看到,TLS 的完整過程需要三個演算法(協議),金鑰互動演算法,對稱加密演算法,和訊息認證演算法(TLS 的傳輸會使用 MAC(message authentication code) 進行完整性檢查)

相關演算法圖解:

使用公鑰密碼建立對稱金鑰(無第三方)
MAC鑑別原理

參考文章:

(1條訊息) TLS/SSL 工作原理及握手過程詳解_Tyler_Zx的部落格-CSDN部落格_tls原理圖解

HTTP over SSL/TLS · 筆試面試知識整理 (hit-alibaba.github.io)

(圖解HTTP)