【網絡】SSL/TLS介紹

一、SSL/TLS 概述

  • SSL(Secure Socket Layer) : 最初由網景(Netscape)開發,用于在客戶端和服務器之間建立安全的加密連接,防止數據被竊取或篡改。后來逐步演進,最終被 TLS 取代。

  • TLS(Transport Layer Security) : TLS 是 SSL 的后繼協議,目前已經成為互聯網安全通信的標準。它不僅實現了數據加密,還提供了身份驗證和數據完整性保護,確保雙方通信時的信息保密且未被篡改。

在這里插入圖片描述

SSL/TLS協議提供的服務主要有:

  1. 認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
  2. 加密數據以防止數據中途被竊取;
  3. 維護數據的完整性,確保數據在傳輸過程中不被改變。

在這里插入圖片描述

TLS與SSL的差異
  1. 版本號:TLS記錄格式與SSL記錄格式相同,但版本號的值不同,TLS的版本1.0使用的版本號為SSLv3.1。
  2. 報文鑒別碼:SSLv3.0和TLS的MAC算法及MAC計算的范圍不同。TLS使用了RFC-2104定義的HMAC算法。SSLv3.0使用 了相似的算法,兩者差別在于SSLv3.0中,填充字節與密鑰之間采用的是連接運算,而HMAC算法采用的是異或運算。但是兩者的安全程度是相同的。
  3. 偽隨機函數:TLS使用了稱為PRF的偽隨機函數來將密鑰擴展成數據塊,是更安全的方式。
  4. 報警代碼:TLS支持幾乎所有的SSLv3.0報警代碼,而且TLS還補充定義了很多報警代碼,如解密失敗 (decryption_failed)、記錄溢出(record_overflow)、未知CA(unknown_ca)、拒絕訪問 (access_denied)等。
  5. 密文族和客戶證書:SSLv3.0和TLS存在少量差別,即TLS不支持Fortezza密鑰交換、加密算法和客戶證書。
  6. certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息計算MD5和SHA-1散列碼時,計算的輸入有少許差別,但安全性相當。
  7. 加密計算:TLS與SSLv3.0在計算主密值(master secret)時采用的方式不同。
  8. 填充:用戶數據加密之前需要增加的填充字節。在SSL中,填充后的數據長度要達到密文塊長度的最小整數倍。而在TLS中,填充后的數據長度可以是密文塊長度的任意整數倍(但填充的最大長度為255字節),這種方式可以防止基于對報文長度進行分析的攻擊。
TLS的主要增強內容

TLS的主要目標是使SSL更安全,并使協議的規范更精確和完善。TLS 在SSL v3.0 的基礎上,提供了以下增強內容:

  1. 更安全的MAC算法
  2. 更嚴密的警報
  3. “灰色區域”規范的更明確的定義
TLS對于安全性的改進
  1. 對于消息認證使用密鑰散列法:TLS 使用“消息認證代碼的密鑰散列法”(HMAC),當記錄在開放的網絡(如因特網)上傳送時,該代碼確保記錄不會被變更。SSLv3.0還提供鍵控消息認證,但HMAC比SSLv3.0使用的(消息認證代碼)MAC 功能更安全。
  2. 增強的偽隨機功能(PRF):PRF生成密鑰數據。在TLS中,HMAC定義PRF。PRF使用兩種散列算法保證其安全性。如果任一算法暴露了,只要第二種算法未暴露,則數據仍然是安全的。
  3. 改進的已完成消息驗證:TLS和SSLv3.0都對兩個端點提供已完成的消息,該消息認證交換的消息沒有被變更。然而,TLS將此已完成消息基于PRF和HMAC值之上,這也比SSLv3.0更安全。
  4. 一致證書處理:與SSLv3.0不同,TLS試圖指定必須在TLS之間實現交換的證書類型。
  5. 特定警報消息:TLS提供更多的特定和附加警報,以指示任一會話端點檢測到的問題。TLS還對何時應該發送某些警報進行記錄。

二、SSL/TLS 協議流程

2.1 對稱加密

對稱加密是指在加密和解密數據時使用相同的密鑰。發送者使用該密鑰將明文轉換為密文,而接收者則使用同一密鑰將密文還原為原始數據。

  1. 加密過程:發送方用密鑰 K 加密明文 P,得到密文 C = Encrypt(K, P)
  2. 解密過程:接收方必須用相同的密鑰 K 解密密文,得到 P = Decrypt(K, C)

關鍵點:雙方必須共享同一個密鑰 K,因此密鑰必須從發送方傳遞給接收方

優點

  • 速度快:對稱加密算法通常計算效率高,適合大數據量的加密。
  • 實現簡單:算法相對簡單,資源占用較少。

缺點

  • 密鑰分發問題:雙方必須共享同一個密鑰,如何安全地傳遞這個密鑰是一個關鍵問題。如果密鑰在傳輸過程中被截獲,數據安全就會受到嚴重威脅。

2.2 非對稱加密

非對稱加密(如 RSA、ECC)的核心特性是使用一對關聯的密鑰公鑰(公開)私鑰(私密)。在傳輸密鑰時,其邏輯與對稱加密完全不同,核心在于:公鑰可公開傳輸,私鑰絕不外傳,且主要用于安全傳輸對稱加密的密鑰

  • 公鑰:可以公開給任何人,用于加密數據或驗證數字簽名。
  • 私鑰:僅由持有者保管,用于解密數據或生成數字簽名。

優點

  • 安全的密鑰分發:無需通過安全渠道傳輸私密密鑰,公鑰可以公開分發,極大降低了密鑰泄露風險。
  • 數字簽名:可以使用私鑰生成簽名,別人可以用公鑰驗證數據的完整性和真實性。

缺點

  • 計算速度較慢:相比對稱加密,非對稱加密在計算上更為復雜,因此通常只用于加密小數據量或者用來交換對稱加密所使用的密鑰。

常見算法 如 RSA、ECC(橢圓曲線加密)等。

2.3 公鑰和私鑰

公鑰(Public Key)
  • 定義:可以公開傳播的密鑰,任何人都能獲取。
  • 特性
    • 用于加密數據驗證數字簽名,但無法解密自己加密的內容。
    • 相當于一把 “公開的鎖”,任何人都能用這把鎖加密信息,但只有持有對應鑰匙的人才能打開。
私鑰(Private Key)
  • 定義:必須嚴格保密的密鑰,僅由所有者持有。
  • 特性
    • 用于解密公鑰加密的數據生成數字簽名,是加密體系的安全核心。
    • 相當于 “唯一的鑰匙”,一旦泄露,整個加密體系將失效。
公鑰的用途
  • 加密數據:發送方用接收方的公鑰加密信息,確保只有接收方(持有私鑰)能解密。
    (例:HTTPS 中客戶端用服務器公鑰加密對稱密鑰)。
  • 驗證簽名:用于驗證某段數據是否由對應的私鑰持有者生成(數字簽名的核心邏輯)。
私鑰的用途
  • 解密數據:解公鑰加密的信息,獲取原始內容。
  • 生成簽名:對數據進行簽名,證明數據由私鑰持有者發出,且未被篡改(如 SSL 證書簽名、Git commit 簽名)

2.4 TLS證書

TLS 證書的本質與核心作用
  • 定義:TLS 證書是一種遵循 X.509 標準 的數字文檔,用于證明 “網絡實體(如服務器、客戶端)的身份” 與 “其公鑰的合法性”,本質是 公鑰與身份的綁定憑證
TLS 證書的關鍵組成部分(X.509 格式)

一張標準的 TLS 證書包含以下核心字段(以服務器證書為例):

  1. 主體信息(Subject)

    • 證書持有者的身份標識,如域名(www.example.com)、組織名稱(企業)、國家 / 地區等。
    • 關鍵字段Common Name (CN)Subject Alternative Name (SAN),必須與訪問的域名嚴格匹配(如證書 CN 為example.com,無法用于www.example.com,會觸發瀏覽器警告)。
  2. 公鑰(Public Key)

    • 服務器用于非對稱加密的公鑰(如 RSA 2048 位或 ECC 密鑰),客戶端通過證書獲取該公鑰。
  3. 頒發機構(Issuer)

    • 簽發證書的 CA(Certificate Authority,證書權威機構)名稱,如 DigiCert、Let’s Encrypt。
  4. 有效期(Validity)

    • 證書生效的起止時間,過期后客戶端會拒絕連接(需重新申請證書)。
  5. 數字簽名(Signature)

    • CA 使用自身私鑰對證書內容(除簽名外的所有字段)進行哈希和加密,形成簽名。客戶端用 CA 的公鑰驗證簽名,確保證書未被篡改。
  6. 序列號(Serial Number)

    • CA 為證書分配的唯一標識符,用于吊銷時標識證書。
證書的頒發流程:CA 如何 “蓋章認證”?
  1. 服務器申請證書(CSR 生成)

    • 服務器生成密鑰對(公鑰 + 私鑰),并使用公鑰和身份信息生成證書簽名請求(CSR),包含域名、組織信息等。
  2. CA 審核與簽名

    • CA 對服務器身份進行驗證(如域名所有權、企業合法性),審核通過后,用自身私鑰對 CSR 內容簽名,生成最終的 TLS 證書。
    • CA 的信任基礎:CA 的根證書已預裝在操作系統、瀏覽器中(如 Windows、Chrome 內置數百個根 CA 證書),客戶端信任 CA 的簽名。
  3. 證書分發

    • 服務器將證書部署到服務器端,供客戶端在 TLS 握手時獲取。

2.5 SSL/TLS 握手過程

TLS(Transport Layer Security,傳輸層安全)握手是客戶端與服務器建立安全通信的核心過程,其目標是:協商加密算法、驗證身份、生成共享密鑰,確保后續數據傳輸的機密性和完整性
在這里插入圖片描述

第一階段:客戶端發起握手(ClientHello)
  1. 客戶端發送的關鍵信息

    • 版本號:聲明支持的 TLS 最高版本(如 TLS 1.2)。
    • 隨機數(Client Random):一個 32 字節的隨機數,用于后續生成密鑰。
    • 密碼套件列表:客戶端支持的加密算法組合(如TLS_RSA_WITH_AES_256_GCM_SHA384,包含密鑰交換算法、對稱加密算法、哈希算法)。
    • 擴展字段:可選信息(如 SNI 域名、壓縮算法等)。
  2. 核心目的
    告知服務器 “我想建立安全連接,并提供了可選的加密方案”。

第二階段:服務器響應(ServerHello + 證書 + 密鑰交換)
  1. ServerHello 消息

    • 選擇版本:服務器從客戶端支持的版本中選擇最高兼容版本。
    • 隨機數(Server Random):另一個 32 字節隨機數,與 Client Random 共同構成密鑰生成的基礎。
    • 選定密碼套件:從客戶端列表中選擇一個具體的加密方案。
    • 擴展字段:返回服務器配置(如證書類型)。
  2. 服務器證書(Certificate)

    • 服務器發送自己的數字證書(含公鑰),證書由 CA(證書頒發機構)簽名,用于證明服務器身份。
    • 客戶端驗證證書:檢查證書是否過期、CA 是否可信、域名是否匹配(防止中間人攻擊)。
  3. 密鑰交換相關消息(如 ServerKeyExchange)

    • 若密碼套件使用 RSA 等算法,服務器直接在證書中提供公鑰;若使用 DH(Diffie-Hellman)等算法,服務器會發送用于密鑰協商的參數。
  4. ServerHelloDone
    服務器告知客戶端 “握手參數已發送完畢”。

第三階段:客戶端驗證與密鑰生成
  1. 客戶端驗證服務器身份

    • 通過服務器證書中的公鑰,驗證證書簽名是否有效(使用 CA 的根公鑰),確認服務器合法性。
  2. 生成預主密鑰(Pre-Master Secret)

    • 客戶端生成一個 48 字節的隨機數,用服務器公鑰加密(非對稱加密),發送給服務器(即ClientKeyExchange 消息)。
    • 只有服務器能用私鑰解密該數據,獲取預主密鑰。
  3. 計算主密鑰(Master Secret)

    • 客戶端和服務器分別用以下數據生成相同的主密鑰:
      Master Secret = PRF(Pre-Master Secret, "master secret", Client Random + Server Random)
      其中 PRF 是偽隨機函數,確保輸出的密鑰隨機性。
  4. 生成會話密鑰(Session Keys)

    • 主密鑰進一步衍生出多組密鑰,用于后續通信:
      • 加密密鑰:客戶端和服務器各一套,用于數據加密。
      • MAC 密鑰:用于計算消息認證碼(HMAC),確保數據完整性。
第四階段:密鑰驗證與握手完成
  1. 客戶端發送 ChangeCipherSpec
    告知服務器 “后續通信將使用新協商的加密算法和密鑰”。

  2. 客戶端發送 Finished 消息

    • 用剛生成的加密密鑰,對握手過程中的所有消息哈希值進行加密,發送給服務器(用于驗證密鑰正確性和握手完整性)。
  3. 服務器響應 ChangeCipherSpec
    確認切換到新的加密機制。

  4. 服務器發送 Finished 消息
    同樣用加密密鑰對握手消息哈希加密,回傳給客戶端,完成雙向驗證。

2.6 握手后的通信

  • 握手完成后,客戶端與服務器用對稱加密算法(如 AES)和會話密鑰進行數據傳輸,每次通信都附帶 HMAC 確保完整性。
  • 非對稱加密僅在握手階段用于密鑰交換,避免了大量數據加密的性能損耗。
密鑰生成:雙方協商,不對外暴露
  • TLS 握手時,對稱加密的會話密鑰由以下步驟生成(以 RSA 握手為例):
    1. 客戶端生成預主密鑰(隨機數),用服務器公鑰加密后發送(此時公鑰僅用于保護預主密鑰的傳輸)。
    2. 服務器用私鑰解密得到預主密鑰,雙方再結合各自的隨機數(Client Random + Server Random),通過偽隨機函數(PRF)生成主密鑰(Master Secret)
    3. 主密鑰進一步衍生出對稱加密所需的會話密鑰(如客戶端發送密鑰、服務器發送密鑰等)。

整個過程中,會話密鑰的生成依賴于雙方的隨機數和預主密鑰,而預主密鑰在傳輸時被服務器公鑰加密,中間人無法破解(因無服務器私鑰),因此會話密鑰僅雙方可知

密鑰保密:不公開傳輸,僅內存持有
  • 會話密鑰從未通過網絡公開傳輸,僅存在于客戶端和服務器的內存中,用于數據加密 / 解密。
  • 即使網絡中截獲密文,由于不知道會話密鑰,也無法解密數據(對稱加密的安全性依賴于密鑰的保密性)。

在這里插入圖片描述

三、總結

TLS 的安全性與實踐要點
  1. 安全增強

    • 前向保密(FS):使用 ECDHE 等算法,即使服務器私鑰泄露,歷史會話也無法解密。
    • 證書透明度:強制 CA 將證書記錄在公開日志,防止偽造證書。
  2. 常見問題

    • 證書過期 / 域名不匹配:瀏覽器會提示 “連接不安全”,需及時更新證書或確保域名與證書 CN/SAN 一致。
    • 中間人攻擊:若 CA 私鑰泄露或證書鏈驗證失敗,可能導致加密失效,需依賴瀏覽器內置的根 CA 信任機制防范。
TLS 如何保障安全?

TLS 通過 “非對稱加密協商對稱密鑰,對稱加密傳輸數據,數字證書驗證身份” 的三層設計,解決了網絡通信中的三大核心問題:密鑰安全分發、身份偽造、數據篡改。其混合加密架構既保證了安全性,又通過對稱加密的高效性支撐了全球海量的 HTTPS 流量,成為現代互聯網安全的基石。

更多資料:https://github.com/0voice

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87260.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TLF35584

13、SPI串行外設接口 13.1 介紹 主要功能 SPI 總線是?種以全雙工模式運行的同步串行數據鏈路。TLF35584 在從機模式下進行通信,其中主機(μC)啟動數據幀。TLF35584應該通過專用片選線進行尋址。這允許其他從設備連接到SPI總線。 數據傳輸 開始通信,μ…

word中如何保存高清圖片,并保存為高質量的pdf文件(圖像不失真)

word中如何保存高清圖片 打開word,選擇,選項,高級選項,選擇不壓縮文件中的圖像并保持分辨率高保真 將word保存為高質量的pdf文件 不用另存為或者導出 選擇文件,選擇打印: 選擇中間都打印出pdf即可。 然后再選擇打印…

Day03_C語言IO進程線程

01.思維導圖 02.創建一個進程扇 #include <25051head.h> int main(int argc, const char *argv[]) {pid_t pid;int i;for(i0;i<4;i){pidfork();if(pid0){//printf("子進程:pid[%d]\n",pid);printf("子進程%d:子進程pid[%d],父進程pid[%d]\n",i1,g…

獲取Qwen 2.5 內部網絡結構 講解

獲取Qwen 2.5 內部網絡結構 講解 Qwen2DecoderLayer( (self_attn): Qwen2Attention( (q_proj): Linear(in_features=2048, out_features=2048, bias=True) (k_proj): Linear(in_features=2048, out_features=256, bias=True) (v_proj): Linear(in_features=2048, out_features…

在深度學習中,batch、epoch 和 iteration 的關系

用一個實際例子和簡單代碼來清晰解釋 batch、epoch 和 iteration 的關系&#xff1a; ------------------------------------------------------------------------------------ 假設場景 你有一個數據集&#xff1a;1000 張貓狗圖片 你設置 batch_size 100&#xff08;每次…

RabbitMQ 高級特性之持久性

1. 簡介 在 RabbitMQ 的消息發送流程中&#xff0c;一共有三種消息丟失的情況&#xff1a; 生產者給 broker 發送的消息&#xff0c;broker 沒有收到broker 將消息丟失broker 給消費者發送消息時消息丟失 對于第一種情況&#xff0c;我們可以使用 RabbitMQ 提供的發布確認模…

應急響應靶機-近源OS-1-知攻善防實驗室

前景需要&#xff1a; 小王從某安全大廠被優化掉后&#xff0c;來到了某私立小學當起了計算機老師。某一天上課的時候&#xff0c;發現鼠標在自己動彈&#xff0c;又發現除了某臺電腦&#xff0c;其他電腦連不上網絡。感覺肯定有學生搗亂&#xff0c;于是開啟了應急。 1.攻擊…

Linux 內存管理與緩存機制

文章目錄 內存介紹buff/cache 與匿名頁Swap&#xff08;交換空間&#xff09;&#xff1a;內存的臨時倉庫 內存回收與Swap機制內存頁的兩種類型內核回收決策流程如何解讀內存狀態drop_caches 參數說明 實踐操作查看內存狀態查看Swap狀態釋放 buff/cache 緩存 內存介紹 當使用 …

【嵌入式電機控制#6】編碼器原理與內部構造

一、簡介 編碼器是一種將直線位移和角位移數據轉換為脈沖信號、二進制編碼的設備。常用于測量物體運動的位置、角度或速度。 二、分類 1. 按檢測分類&#xff1a; &#xff08;1&#xff09;光電式編碼器 &#xff08;2&#xff09;磁電式編碼器 2. 編碼類型分類&#xff1a; …

FastAPI 安裝使用教程

一、FastAPI 簡介 FastAPI 是一個現代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;基于 Python 3.7 和標準類型提示構建&#xff0c;廣泛應用于 API 服務開發。它使用 Pydantic 進行數據驗證&#xff0c;集成自動生成 OpenAPI 和文檔 UI&#xff0c;非常適合…

【WPF】WPF(樣式)

Window.Resources 當前窗體作用域資源 TargetType“Button” 使得當前窗體的組件類型都適配此樣式<Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"WhiteSmoke"></Setter><Setter…

Jmeter(六):json斷言元件,jmeter參數化實現

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 json斷言元件 json斷言元件介紹 json斷言元件與響應斷言元件的功能類型&#xff0c;它只針對響應正文為json數據格 式的內容進行斷言功能。 添加路徑&…

python3常用模塊

1 數學運算模塊 math “math”模塊提供了許多常用的數學函數&#xff0c;例如三角函數、四舍五入、指數、對數、平方根、總和等 import math1.1 常數 math.pi 返回圓周率的數學常數。math.e 返回指數的數學常數示例&#xff1a; print(math.pi) print(math.e)1.2 fabs(x) …

基于Pandas和FineBI的昆明職位數據分析與可視化實現(二)- 職位數據清洗與預處理

文章目錄 一、數據集介紹二、缺失值處理三、重復值處理四、薪資數據格式處理五、技能格式處理六、拆分薪資列并處理異常值七、拆分工作區域列八、清洗后的數據集九、完整代碼 一、數據集介紹 這份昆明職位數據集源自 Boss 直聘&#xff0c;數據量頗為豐富&#xff0c;包含 177…

工業4.0核心引擎!意法STM32F407ZET6 單片機 賦能智能PLC/網關設計

STM32F407ZET6 單片機深度解析 1. 產品定位 STM32F407ZET6 是意法半導體&#xff08;STMicroelectronics&#xff09;推出的 高性能ARM Cortex-M4單片機&#xff0c;采用 LQFP144封裝&#xff0c;主打 浮點運算、豐富外設和工業級可靠性&#xff0c;廣泛應用于需要復雜算法和實…

[Andrej Karpathy_2] vibe coding | 大型語言模型的1960年代 | 自主性滑塊

Hugging Face的Tom Wolf分享了一段我非常喜歡的視頻&#xff0c;這些孩子正在進行氛圍編程。 我覺得這是一個非常治愈的視頻&#xff0c;我愛這個視頻。&#xff08;they grow up "knowing" they can build anything &#x1f62d;greatness) 未來是美好的 前文&…

uv包管理常用命令

uv常用命令 uv init 初始化項目 uv add 包名 添加包&#xff1b;多個包名&#xff0c;中間用空格 uv tree 包的關系 uv remove 刪除所有包 uv sync 重新解析 安裝工具 1、mypy 檢測工具 uv tool install mypy uv tool run mypy xxx.py 使用 2、Ruff uv tool…

Nano-vLLM 源碼學習

以下內容由Trae生成。我只管問和排版。 Nano-vLLM 是一個從零構建的輕量級vLLM實現項目&#xff0c;具備快速離線推理、代碼可讀性高和優化功能豐富等特點&#xff0c;性能表現和原版vLLM相媲美。以下是該項目各目錄和文件的功能說明&#xff1a; 1. 根目錄&#xff1a; benc…

MySQL 8.4 備份與恢復完全指南

本文全面解析MySQL 8.4的備份與恢復機制&#xff0c;涵蓋備份類型、方法、策略及實際操作示例。 一、備份類型解析 1. 物理(原始)備份 vs 邏輯備份 特性物理備份邏輯備份原理直接復制數據庫目錄/文件&#xff08;如數據文件、日志&#xff09;導出邏輯結構&#xff08;CREATE…

Mac 部署Latex OCR并優化體驗(打包成App并支持全局快捷鍵)

&#x1f341; 前言 最近閱讀論文&#xff0c;在做筆記的時候總是要手動輸入一些latex公式&#xff0c;非常耗時。我使用Hapigo的Latex 公式識別&#xff0c;感覺還挺好用&#xff0c;但是缺陷是只有30次免費額度&#xff0c;于是在網上搜索了一下&#xff0c;發現可以通過本地…