【計網】SSL/TLS核心原理

序言

在HTTP協議中,信息是明文傳輸的,因此為了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)協議。HTTPS也是一種超文本傳送協議,在HTTP的基礎上加入了SSL/TLS協議,SSL/TLS依靠證書來驗證服務端的身份,并為瀏覽器和服務端之間的通信加密。HTTPS是一種通過計算機網絡進行安全通信的傳輸協議,使用HTTP進行通信,借助SSL/TLS建立安全通道和加密數據包。使用HTTPS的主要目的是提供對網站服務端的身份認證,同時保護交換數據的隱私與完整性。TLS是傳輸層加密協議,前身是SSL協議,由網景(Netscape)公司1995年發布,有時候TLS和SSL兩者不做太多區分。

SSL/TLS協議的版本演進

TCP是傳輸層的協議,但是它是明文傳輸的,是不安全的。SSL的誕生給TCP加了一層保險,為TCP通信提供安全及數據完整性保護。TLS只是SSL的升級版,它們的作用是一樣的。TLS(Transport Layer Security,傳輸層安全協議)由兩層組成:TLS記錄(TLS Record)和TLS握手(TLS Handshake)。TLS協議是更新、更安全的SSL協議版本。SSL/TLS可以理解為安全傳輸層協議不同發展階段的版本。1999年,SSL應用廣泛,已經成為互聯網上的事實標準。IETF(Internet Engineering Task Force,國際互聯網工程任務組)在1999年把SSL標準化。完成標準化之后,SSL協議名稱被改為TLS。SSL/TLS位于應用層和傳輸層之間,除了HTTP外,它可以為任何基于TCP傳輸層以上的應用層協議(如WebSocket協議)提供安全性保證。理論上,SSL/TLS協議屬于傳輸層。從理論模型的維度來說,該協議在TCP/IP協議棧的分層結構中所處的層次位置大致如圖12-1所示。但是,在具體的編碼實現上,SSL/TLS協議屬于應用層。從實現的維度來說,該協議在TCP/IP協議棧分層結構中所處的層次位置大致如圖

在這里插入圖片描述
綜合起來可以表述為:SSL/TLS協議理論上屬于傳輸層,卻實現于應用層。

在客戶端瀏覽器中,目前應用最廣泛的是SSL 3.0、TLS 1.0(有時被標為SSL 3.1)?、TLS 1.1(有時被標為SSL3.2)?、TLS 1.2(有時被標為SSL 3.3)四個版本的協議。比如,在IE瀏覽器上,用戶可以設置是否使用SSL/TLS協議,還可以設置支持哪一些版本的協議,具體如圖

在這里插入圖片描述
在這里插入圖片描述

SSL/TLS協議的分層結構

SSL/TLS協議包括握手協議(Handshake Protocol)、密碼變化協議(SSL Change Cipher Spec Protocol)、警告協議(Alert Protocol)、記錄協議(Record Protocol)。

(1)握手協議:SSL/TLS協議非常重要的組成部分,用來協商通信過程中使用的加密套件(加密算法、密鑰交換算法和MAC算法等)?、在服務端和客戶端之間安全地交換密鑰、實現服務端和客戶端的身份驗證。

(2)密碼變化協議:客戶端和服務端通過密碼變化協議通知對端,隨后的報文都將使用新協商的加密套件和密鑰進行保護和傳輸。

(3)警告協議:用來向對端發送告警信息,消息中包含告警的嚴重級別和描述。

(4)應用數據協議:負責將SSL/TLS承載的應用數據傳達給通信對端。

(5)記錄協議:主要負責對上層的數據(SSL/TLS握手協議、SSL/TLS密碼變化協議、SSL/TLS警告協議和應用數據協議)進行分塊計算、添加MAC值、加密等處理,并把處理后的記錄塊傳輸給對端。

在這里插入圖片描述

SSL/TLS協議主要分為兩層(上層的是握手協議、密碼變化協議、警告協議和應用數據協議,下層的是記錄協議)?,主要負責使用對稱密碼對消息進行加密。其中,握手協議(Handshake Protocol)是SSL/TSL通信中最復雜的子協議,也是安全通信所涉及的第一個子協議。

SSL/TLS運行過程

SSL/TLS協議實現通信安全的基本思路是:消息發送之前,發送方A先向接收方B申請公鑰,發送方A采用公鑰加密法對發出去的通信內容進行加密,接收方B收到密文后,用自己的私鑰對通信密文進行解密。

(1)客戶端向服務端索要并驗證公鑰。(公鑰加密,私鑰解密驗證)
(2)雙方協商生成“對話密鑰”?。
(3)雙方采用“對話密鑰”進行加密通信。

前兩步又稱為“握手階段”?,每一個TLS連接都會以握手開始。?“握手階段”涉及四次通信,并且所有通信都是明文的。在握手過程中,客戶端和服務端將進行以下四個主要階段:

(1)交換各自支持的加密套件和參數,經過協商后,雙方就加密套件和參數達成一致。
(2)驗證對方(主要指服務端)的證書,或使用其他方式進行服務端身份驗證。
(3)對將用于保護會話的共享主密鑰達成一致。
(4)驗證握手消息是否被第三方修改。

SSL/TLS第一階段握手

客戶端與服務端通過TCP三次握手建立傳輸層連接后,通信雙方需要交換各自支持的加密套件和參數,經過協商后,使通信雙方的加密套件和參數達成一致。

SSL/TLS“握手”第一個階段的工作為:由客戶端發一個Client Hello報文給服務端,并且第一個階段只有這一個數據幀(報文)?。Client Hello數據幀的內容大致包括以下信息:

(1)客戶端支持的SSL/TLS協議版本,比如TLS 1.2版。
(2)一個客戶端生成的隨機數,這是握手過程中的第一個隨機數,稱之為Random_C。
(3)客戶端支持的簽名算法、加密方法、摘要算法(比如RSA公鑰簽名算法)?。
(4)客戶端支持的壓縮方法。

SSL/TLS第二階段握手

SSL/TLS握手第二個階段的工作為:服務端對客戶端的Client Hello請求進行響應。在收到客戶端請求(ClientHello)后,服務端向客戶端發出回應,這個階段的服務端回應幀(報文)一般包含4個回復幀:Server Hello幀、Certificate幀、Server Key Exchange幀、Server Hello Done幀。

Server Hello幀

服務端回復的Server Hello幀主要包含以下內容:
(1)回復服務端使用的加密通信協議版本,比如TLS 1.2版本。
(2)一個服務端生成的隨機數,是整個握手過程中的第二個隨機數,記為“Random_S”?,稍后用于生成“對話密鑰”?。
(3)確認使用的加密方法,比如RSA公鑰加密。
(4)服務端的證書。

Certificate幀

Certificate幀用于返回服務端證書,該證書中含有服務端的證書清單(包括服務端公鑰)?,用于身份驗證和密鑰協商。在多數電子商務應用中,客戶端都需要進行服務端身份驗證,服務端通過Certificate幀發送自己的證書給客戶端。

服務端通過Certificate幀給客戶端提供身份信息,那么客戶端是否需要提供自己的身份證書給服務端呢?

雖然大部分場景中服務端不需要驗證客戶端的身份,但是只要服務端需要驗證客戶端的身份,服務端就會發一個CertificateRequest證書請求給客戶端。比如,在一些安全性要求較高的機構(如金融機構)往往需要驗證客戶端身份證書,這些機構只允許通過認證客戶連入自己的網絡,并且會給正式客戶提供USB密鑰,里面就包含了一張客戶端身份證書,在通信握手時要求客戶端提供證書。

Server Key Exchange幀

Server Key Exchange幀的目的是攜帶密鑰交換的額外數據,其消息內容對于不同的協商算法套件都會存在差異。

在某些場景中,服務端不需要發送Server Key Exchange握手消息。如果在Server Hello消息中使用DHE/ECDHE非對稱密鑰協商算法來進行SSL握手,就將發送該類型握手消息。對于使用RSA算法的SSL握手,不會發送該類型握手消息。另外,使用DH、ECDH算法進行握手時也不會發送該類型握手消息。

Server Hello Done幀

Server Hello Done幀是第二階段的最后一幀,標記服務端對客戶端的Client Hello請求幀的所有響應報文發送完畢,Server Hello Done幀的長度為0。

客戶端收到服務端證書后,進行驗證,如果證書不是可信機構頒發的,或者域名不一致,或者證書已經過期,那么客戶端會進行警告;如果證書沒有問題,就繼續進行通信。

SSL/TLS第三階段握手

SSL/TLS握手(Handshake)第三個階段的工作為:客戶端進行回應。在這個階段,客戶端會發送Client KeyExchange、Change Cipher Spec、Encrypted Handshake三個數據幀。

客戶端收到第二個階段的服務端回應報文以后,首先驗證服務端證書。如果證書不是可信機構頒布、或者證書中的域名與實際域名不一致、或者證書已經過期,就會向訪問者顯示一個警告,由其選擇是否還要繼續通信。

如果證書沒有問題,客戶端就會從證書中取出服務端的公鑰,然后向服務端發送三項信息:

(1)一個隨機數。該隨機數用服務端公鑰加密,防止被第三方竊聽。

此隨機數是整個握手階段出現的第三個隨機數,又稱Pre-master key。有了它以后,客戶端和服務端就同時有了三個隨機數,接著雙方用事先商定的加密方法各自生成本次會話所用的同一把“會話密鑰”?。

(2)編碼改變通知,表示隨后的信息都將用雙方商定的加密方法和密鑰加密后發送。

(3)客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時也是前面發送的所有內容的哈希值,用來供服務端校驗。

服務端的證書信息會包含Public Key(公鑰)?,稍后客戶端進行證書驗證(身份驗證)的流程大致為:Client隨機生成一串數,然后用Server發送的Public Key加密(RSA算法)后發給Server;而Server會用其對應的Private key(私鑰)解密后再返回給Client; Client將其與原文比較,如果一致,則說明Server擁有Private key,與自己通信的對端Server正是證書的擁有者,因為Public key加密的數據只有Private key才能解密。在實際通信過程中,這個認證過程會復雜很多,包含多次哈希、偽隨機等復雜運算。

SSL/TLS第四階段握手

SSL/TLS握手(Handshake)第四個階段的工作為:服務端進行最后的回應。在收到客戶端的第三個隨機數Pre-master key之后,服務端計算并生成本次會話所用的“會話密鑰”?,然后向客戶端最后發送下面的數據幀:

(1)Change Cipher Spec幀:此幀為服務端的編碼改變通知報文。
(2)Encrypted Handshake Message幀:此幀為服務端的握手結束通知報文。

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

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

相關文章

Web Components 開發與集成

以下是關于 Web Components 開發與集成 的系統知識梳理,涵蓋核心概念、高級特性、集成與優化等內容: 一、Web Components 核心概念 技術作用核心 APICustom Elements定義可復用的自定義 HTML 元素customElements.define()、生命周期鉤子(connectedCallback 等)Shadow DOM封…

day26 學習筆記

文章目錄 前言一、圖像顏色轉換1.HSV顏色空間2.顏色轉換 二、灰度化1.最大值法2.平均值法3.加權均值法 三、二值化1.全局閾值法1.閾值法(THRESH_BINARY)2.反閾值法(THRESH_BINARY_INV)3.截斷閾值法(THRESH_TRUNC)4.低閾值零處理(THRESH_TOZERO)5.超閾值零處理(THRESH_TOZERO_IN…

威鋒VL822-Q7T10GHUB芯片適用于擴展塢顯示器

一、概述 VL822-Q7T是VIA Lab(威盛電子旗下專注于USB相關技術研發的子公司)精心打造的一款高性能USB 3.1 Gen2集線器控制器芯片。在當今數字化時代,USB接口作為設備連接與數據傳輸的核心通道,其性能與穩定性至關重要。VL822-Q7T憑…

華為OD機試真題——最小的調整次數/特異性雙端隊列(2025A卷:100分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式! 2025華為OD真題目錄全流程解析/備考攻略/經驗分享 華為OD機試真題《最小的調…

關于 Spring Boot 微服務解決方案的對比,并以 Spring Cloud Alibaba 為例,詳細說明其核心組件的使用方式、配置及代碼示例

以下是關于 Spring Boot 微服務解決方案的對比,并以 Spring Cloud Alibaba 為例,詳細說明其核心組件的使用方式、配置及代碼示例: 關于 Spring Cloud Alibaba 致力于提供微服務開發的一站式解決方案! https://sca.aliyun.com/?spm7145af80…

常見的爬蟲算法

1.base64加密 base64是什么 Base64編碼,是由64個字符組成編碼集:26個大寫字母AZ,26個小寫字母az,10個數字0~9,符號“”與符號“/”。Base64編碼的基本思路是將原始數據的三個字節拆分轉化為四個字節,然后…

B樹、紅黑樹、B+樹和平衡二叉樹(如AVL樹)的區別

B樹、紅黑樹、B樹和平衡二叉樹(如AVL樹)的區別及優缺點的總結: 1. 平衡二叉樹(AVL樹) 結構:二叉搜索樹,每個節點的左右子樹高度差不超過1。平衡方式:通過旋轉(左旋/右旋…

Python Cookbook-6.5 繼承的替代方案——自動托管

任務 你需要從某個類或者類型繼承,但是需要對繼承做一些調整。比如,需要選擇性地隱藏某些基類的方法,而繼承并不能做到這一點。 解決方案 繼承是很方便的,但它并不是萬用良藥。比如,它無法讓你隱藏基類的方法或者屬…

長短期記憶網絡:從理論到創新應用的深度剖析

一、引言 1.1 研究背景 深度學習在人工智能領域的發展可謂突飛猛進,而長短期記憶網絡(LSTM)在其中占據著至關重要的地位。隨著數據量的不斷增長和對時序數據處理需求的增加,傳統的神經網絡在處理長序列數據時面臨著梯度消失和梯…

vue3.2 + element-plus 實現跟隨input輸入框的彈框,彈框里可以分組或tab形式顯示選項

效果 基礎用法&#xff08;分組選項&#xff09; 高級用法&#xff08;帶Tab欄&#xff09; <!-- 彈窗跟隨通用組件 SmartSelector.vue --> <!-- 彈窗跟隨通用組件 --> <template><div class"smart-selector-container"><el-popove…

C語言中冒泡排序和快速排序的區別

冒泡排序和快速排序都是常見的排序算法&#xff0c;但它們在原理、效率和應用場景等方面存在顯著區別。以下是兩者的詳細對比&#xff1a; 一、算法原理 1. 冒泡排序 原理&#xff1a;通過重復遍歷數組&#xff0c;比較相鄰元素的大小&#xff0c;并在必要時交換它們的位置。…

軟件信息安全性測試如何進行?有哪些注意事項?

隨著信息技術的高速發展&#xff0c;軟件已經成為我們生活和工作中不可或缺的一部分。然而&#xff0c;隨著軟件產品的廣泛普及&#xff0c;軟件信息安全性問題也日益凸顯&#xff0c;因此軟件信息安全性測試必不可少。那么軟件信息安全性測試應如何進行呢?在進行過程中又有哪…

springboot集成mybaits-generator自動生成代碼

文章目錄 概述創建springboot項目pom文件aplication.yml代碼生成類mybatis-plus提供的變量controller模板mapper模板總結 概述 創建springboot項目&#xff0c;在這里使用的是springboot 2.6.13版本&#xff0c;引入的項目依賴包如pom文件所寫&#xff0c;jdk使用1.8&#xff…

數據庫脫褲

假設你已經getshell 找到mysql賬號密碼。 網站要連接mysql&#xff0c;就需要把mysql的賬號密碼保存在一個php文件中&#xff0c;類似config.php、common.inc.php等&#xff0c;在shell中&#xff0c;讀取這些文件&#xff0c;找到其中信息即可 下面是一些常見平臺的配置文…

leetcode 337. House Robber III

用動態規劃的思想解決這道題。 對于每一個節點&#xff0c;只有兩種可能&#xff0c;偷或者不偷。 對于一顆以root為根節點的二叉樹&#xff0c;定義rob表示偷root節點能從這棵二叉樹偷到的最大金額。定義notrob表示不偷root節點能從這棵二叉樹偷到的最大金額。 遞推公式分析…

ES和MySQL概念對比

基本概念 ES和MySQL都屬于數據庫&#xff0c;不過各有各的特性&#xff0c;大致使用方法與MySQL類似并無區別。 MySQL&#xff1a;擅長事務持有ACID的特性&#xff0c;確保數據的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;適合海量數據搜索和分析。 ES和MySQL如何…

【python】針對Selenium中彈框信息無法定位的問題,以下是綜合解決方案及注意事項:

一、常見原因分析 1.1 彈窗類型不匹配 若彈窗為alert&#xff0c;需使用driver.switch_to.alert處理&#xff1b; 若為confirm或prompt&#xff0c;同樣適用該方法。 1.2 窗口句柄切換問題 新窗口或彈窗可能開啟新句柄&#xff0c;需先通過driver.window_handles切換到對應句…

歐拉服務器操作系統安裝MySQL

1. 安裝MySQL服務器?? 1. 更新倉庫緩存 sudo dnf makecache2. 安裝MySQL sudo dnf install mysql-server2. 初始化數據庫? sudo mysqld --initialize --usermysql3. 啟動數據庫服務 # 啟動服務 sudo systemctl start mysqld# 設置開機自啟 sudo systemctl enable mysql…

SQLark:一款國產免費數據庫開發和管理工具

SQLark&#xff08;百靈連接&#xff09;是一款面向信創應用開發者的數據庫開發和管理工具&#xff0c;用于快速查詢、創建和管理不同類型的數據庫系統&#xff0c;目前可以支持達夢數據庫、Oracle 以及 MySQL。 對象管理 SQLark 支持豐富的數據庫對象管理功能&#xff0c;包括…

Spring Boot 中的自動配置原理

2025/4/6 向全棧工程師邁進&#xff01; 一、自動配置 所謂的自動配置原理就是遵循約定大約配置的原則&#xff0c;在boot工程程序啟動后&#xff0c;起步依賴中的一些bean對象會自動的注入到IOC容器中。 在講解Spring Boot 中bean對象的管理的時候&#xff0c;我們注入bean對…