首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

SSL 原理與應用 (一):SSL 協議架構、Record/Handshake/Alert/ChangeCipherSpec 四大子協議詳解

     編輯:關於.NET

SSL (Secure Sockets Layer) 為網路通訊提供機密性、完整性與身分驗證。位於 TCP/IP 模型的**傳輸層與應用層之間**,使用 TCP 提供可靠傳輸,在應用層資料傳送前完成加密演算法協商、金鑰交換與伺服器/客戶端驗證。

SSL 協議族四層架構

SSL 協議架構圖

圖 1 SSL 協議分層:Record 為基礎,上層為 Handshake、Alert、ChangeCipherSpec

子協議功能關鍵特性
SSL Record Protocol資料封裝、壓縮、加密、完整性保護 (MAC)建立於可靠傳輸 (TCP) 之上;所有上層協議皆封裝於 Record
SSL Handshake Protocol身分驗證、演算法協商、金鑰交換、建立加密連線封裝於 Record 中;客戶端/伺服器雙向驗證可選
SSL Alert Protocol傳遞警告:Fatal (立即中斷) / Warning (僅記錄)如偵測到 MAC 錯誤 → Fatal Alert
SSL ChangeCipherSpec Protocol通知對方後續記錄採用新協商的加密規範單一位元組訊息 (值 1),最簡單的子協議

Record 協議處理流程

Record 協議操作流程

圖 2 Record 協議五步驟:分段 → 可選壓縮 → 計算 MAC → 加密 → 加上 Record Header

  1. 應用資料分段 ≤ 16 KB (214 bytes)
  2. 可選無損壓縮,壓縮後增長 ≤ 1024 bytes
  3. 計算 MAC (HMAC-MD5/SHA)
  4. 對「壓縮資料 + MAC」加密 (對稱加密)
  5. 加上 Record Header:ContentType(1B) + Version(2B) + Length(2B)

Record Header 結構

Record Header 結構

圖 3 Record Header:ContentType | MajorVer | MinorVer | CompressedLength

欄位長度說明
Content Type1 byte上層協議類型:Handshake(22)、Alert(21)、ChangeCipherSpec(20)、Application Data(23)
Major Version1 byteSSL 主版本 (SSLv3 = 3)
Minor Version1 byteSSL 次版本 (SSLv3.0 = 0)
Compressed Length2 bytes明文/壓縮後長度 (bytes)

Handshake 協議完整流程 (四階段)

Handshake 協議流程圖

圖 4 Handshake 四階段:建立安全能力 → 伺服器驗證/金鑰交換 → 客戶端驗證/金鑰交換 → 完成

階段 1:建立安全能力

  • ClientHello:協議版本、Session ID、Cipher Suites、壓縮方法、Client Random
  • ServerHello:選定版本、Session ID、Cipher Suite、壓縮方法、Server Random
  • Cipher Suite 內含:金鑰交換法 (RSA/DH/Fortezza)、加密演算法 (DES/3DES/RC4/AES)、MAC 演算法 (MD5/SHA)、加密類型 (串流/分組)

階段 2:伺服器驗證與金鑰交換

  • Certificate:伺服器憑證鏈 (含公開金鑰)
  • ServerKeyExchange (視金鑰交換法而定,RSA 不需)
  • CertificateRequest (可選):要求客戶端憑證
  • ServerHelloDone:伺服器 Hello 階段結束

階段 3:客戶端驗證與金鑰交換

  • 驗證伺服器憑證:有效期、受信任 CA、簽名驗證、CN 與網域吻合
  • Certificate (若被要求):客戶端憑證
  • ClientKeyExchange:Pre-Master Secret 加密傳送 (RSA) 或 DH 參數
  • CertificateVerify (可選):簽署握手訊息證明持有私鑰

階段 4:完成

  • ChangeCipherSpec:啟用新加密規範
  • Finished:驗證金鑰衍生正確性 (含握手訊息雜湊)
  • 雙向 Finished 交換後,應用層資料開始加密傳輸

伺服器/客戶端憑證驗證檢查清單

驗證項目伺服器憑證 (客戶端檢查)客戶端憑證 (伺服器檢查)
有效期✓✓
受信任 CA✓✓
簽名驗證✓✓
CN/網域吻合✓—
公鑰/簽名一致—✓
LDAP 權限—✓
存取授權—✓

歷史註記:SSL 3.0 (1996) 為基礎,TLS 1.0 (RFC 2246) 為標準化版本,現代瀏覽器已棄用 SSL 2.0/3.0,強制 TLS 1.2+。


本文部分內容改編自《.NET 安全揭秘》
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved