HTTPS安全機制:從加密到證書全解析

目錄

1.HTTPS是什么

2.加密是什么

3.HTTPS的加密過程

3.1對稱加密

3.2非對稱加密

?4.引入證書

?4.1"中間人"攻擊

4.2 引入證書機制

4.3 理解數據簽名

4.4?非對稱加密 + 對稱加密 + 證書認證

5.常見問題

5.1 Fiddler等抓包工具,為啥能解析HTTPS的數據?

5.2 中間人有沒有可能篡改該證書?

5.3?中間人整個掉包證書呢?

5.4?為什么摘要內容在網絡傳輸的時候一定要加密形成簽名??

5.5?為什么簽名不直接加密,而是要先 hash 形成摘要??


1.HTTPS是什么

HTTPS是一個應用層協議,是在HTTP協議的基礎上引入了一個加密層的安全通信協議,核心是通過SSL/TLS 協議對傳輸數據進行加密,確保網絡通信的保密性、完整性和身份真實性


HTTP協議內容都是按照文本的方式明文傳輸的,這就導致在傳輸過程中出現一些被篡改的情況

原因:我們通過網絡傳輸的所有數據包都會經由運營商的路由器、交換機等網絡設備。這意味著運營商可以解析并篡改我們傳輸的數據內容。

當用戶點擊"下載按鈕"時,實際上是在向服務器發送HTTP請求。正常情況下,服務器返回的HTTP響應會包含該APP的下載鏈接。但運營商一旦檢測到這是"天天動聽"的下載請求,就會自動將響應內容篡改為"QQ瀏覽器"的下載地址。

為什么運營商會進行流量劫持?歸根結底是為了牟取利益。💴💴💴

HTTP明文傳輸本身就存在安全隱患,不僅運營商可以輕易劫持,黑客也同樣能從中作梗。想象一下,如果您的個人隱私、支付密碼等敏感信息被截獲,后果將多么嚴重。正是出于這樣的安全考慮,我們才需要HTTPS加密協議來保障用戶信息安全。

2.加密是什么

  • 明文:要傳輸的原始數據
  • 密文:對明文進行加密后使他人不能理解
  • 加密:就是把明文(要傳輸的信息)進行一系列變換,生成密文
  • 解密:就是把密文再進行一系列變換,還原成明文
  • 密鑰:在這個加密解密的過程中,往往需要一個或多個中間的數據,輔助進行這個過程,這樣的數據稱為密鑰

加密解密到如今已經發展成一個獨立的學科:密碼學
而密碼學的奠基人,也正是計算機科學的祖師爺之一,艾倫·麥席森·圖靈

3.HTTPS的加密過程

為確保數據安全,需采用"加密"技術。在網絡傳輸過程中,不再直接傳送明文,而是傳輸經過加密處理的"密文"。加密方式主要分為兩大類:對稱加密和非對稱加密。

3.1對稱加密

對稱加密(Symmetric Encryption)是一種加密和解密使用同一密鑰的加密技術,也稱為 “單密鑰加密”。其核心特點是加密與解密過程共享一個密鑰,操作高效且廣泛應用于各類場景。

通過同一個"密鑰",把明文加密成密文,并且也能把密文揭密成明文

核心原理:

  • 加密過程:明文 + 密鑰 → 通過加密算法 → 密文
  • 解密過程:密文 + 同一密鑰 → 通過解密算法 → 明文
  • 核心要求:加密和解密必須使用完全相同的密鑰,否則無法還原明文。

舉例一個簡單的對稱加密,按位異或

假設明文a = 1234,密鑰key = 8888;加密a^key得到的密文b就是9834

對密文9834再次進行計算b^key,得到的就是原來的明文1234

如果直接把密鑰進行明文傳輸,那么黑客也就能獲取密鑰啦,那么我們所進行的加密操作就形同虛設了,因此密鑰的傳輸也必須加密傳輸,要想對密鑰進行對稱加密,就仍然需要先協商確定一個"密鑰的密鑰",可是對稱加密又是明文傳輸,此時就陷入了死循環,

“要加密密鑰 → 需新密鑰 → 新密鑰又要加密 → 需更上層密鑰……”

此時我們就需要引入非對稱加密

3.2非對稱加密

非對稱加密(Asymmetric Encryption)是一種加密和解密使用不同密鑰的加密技術,也稱為 “公鑰加密”。其核心創新在于通過一對 “公鑰” 和 “私鑰” 實現加密與解密,解決了對稱加密中密鑰傳輸的安全難題。

公鑰不怕泄露,私鑰不能泄露

核心原理

  • 密鑰對:由 “公鑰”(Public Key)和 “私鑰”(Private Key)組成,兩者通過數學算法關聯(如大數分解、離散對數),但從公鑰無法推導出私鑰。
  • 加密解密過程:明文 + 公鑰 → 通過加密算法 → 密文(只有對應的私鑰能解密)。
    ? ? ? ? ? ? ? ? ? ? ? ? ?密文 + 私鑰 → 通過解密算法 → 明文(只有對應的公鑰能加密)。

    ? ? ? ? ? ? ? ? ? ? ? ? ?明文 + 私鑰 → 通過加密算法 → 密文(只有對應的公鑰能解密)。
    ? ? ? ? ? ? ? ? ? ? ? ? ?密文?+ 公鑰 → 通過解密算法 → 明文(只有對應的私鑰能解密)。

    ? ? ? ? ? ? ? ? ? ? ? ? ?公鑰加密→私鑰解密:保證 “消息只有對方能看懂”(保密通信);
    ? ? ? ? ? ? ? ? ? ? ? ? ?私鑰加密→公鑰解密:保證 “消息確實是對方發的”(身份驗證)。
  • 核心特性:公鑰可公開傳播,私鑰必須嚴格保密;用公鑰加密的數據只能用私鑰解密,反之亦然(部分算法支持 “私鑰加密、公鑰解密”,用于簽名)。

舉例:

A需要向B傳遞一些重要文件,但B可能不在場。

為此,雙方約定如下:

  1. B告訴A:"我桌上有個盒子,我會給你一把鎖"
  2. A將文件放入盒子并用這把鎖鎖好
  3. B隨后用對應的鑰匙開鎖取件

在這個類比中:

  • 鎖相當于公鑰(可以公開分發)
  • 鑰匙相當于私鑰(必須由B獨自保管) 只有持有私鑰的人才能解密獲取文件內容。


非對稱加密加密傳輸對稱密鑰

  • 客戶端在本地生成對稱密鑰,通過公鑰進行加密,發送給服務器
  • 由于中間的網絡設備沒有私鑰,即使截獲了數據,也無法還原出內部的原文,也就無法獲取到對稱密鑰
  • 服務器通過私鑰解密,還原出客戶端發送的對稱密鑰,并且使用這個對稱密鑰給客戶端返回響應數據
  • 后續客戶端和服務器的通信都只用對稱加密即可,由于該密鑰只有客戶端和服務器兩個主機知道,其他主機/設備不知道密鑰即使截獲數據也沒有意義

?4.引入證書

?4.1"中間人"攻擊

  • 客戶端如何獲取到公鑰?
  • 客戶端如何確定這個公鑰不是黑客偽造的?

黑客通過替換公鑰,讓客戶端和服務器誤以為在安全交換密鑰,實際對稱密鑰被黑客截獲。由于非對稱加密的 “公鑰公開” 特性,客戶端無法驗證公鑰是否真實(這是單純非對稱加密的漏洞)

4.2 引入證書機制

問題的關鍵就是能夠讓客戶端識別出,拿到的公鑰是不是正確的,合理的而不是偽造的公鑰

為確保通信安全,服務端在啟用HTTPS前需向CA機構申請數字證書。該證書包含申請者信息和公鑰等關鍵數據。當服務器將證書傳輸至瀏覽器時,瀏覽器可直接從中提取公鑰。數字證書的作用類似于身份證,用于驗證服務端公鑰的真實性和權威性。

當你想搭建服務器時,使用HTTPS就需要在公證機構這里申請證書,申請時就需要提交一些資料,如,網站的域名,營業執照,備案號等
申請成功后,公證機構就生成一個"電子證書",證書內容包含

  • 證書發布機構
  • 證書有效期
  • 公鑰
  • 證書所有者
  • 簽名:保證證書合法性的關鍵要點
  • ...

(證書中的各個字段綜合在一起,計算校驗和,原始數據相同,計算得到的校驗和就相同,校驗和不同,說明原始數據就不同)

注:申請證書的時候,需要在特定平臺生成,會同時生成一對密鑰對,即公鑰和私鑰.這對密鑰對就是用來在網絡通信中進行明文加密及數字簽名的
其中公鑰會隨著CSR文件一起發給CA進行權威認證,服務端自己保留私鑰,用來后續進行通信(主要用來交換對稱密鑰)

4.3 理解數據簽名

數據簽名(通常稱為 “數字簽名”,Digital Signature)是一種基于密碼學的安全技術,用于驗證數據的完整性(數據未被篡改)和來源真實性(確認數據發送者身份),同時防止發送者事后抵賴。其核心邏輯基于非對稱加密和哈希算法

當服務器申請CA證書的時候,CA機構會對該服務器端進行審核,并專門為該網站形成數字簽名,過程如下

  • CA機構擁有非對稱加密的私鑰pri和公鑰pub
  • CA機構對服務端申請的證書明文數據進行hash,形成數據摘要
  • 然后對數據摘要用CA私鑰pri加密,得到數字簽名S

服務端申請的證書明文和數字簽名S共同組成了數字證書,這樣一份數字證書就可以頒發給服務端了

如何讓驗證證書是正確的?

客戶端拿到服務端的CA證書之后,會將數據和數據簽名分開。將數據進行哈希散列形成一個哈希值。再將數據簽名使用CA機構的公鑰進行解密,也得到一個哈希值。將這兩個哈希值進行比較,如果相同,則說明證書是正確的。

服務器申請到證書之后,后續客戶端從服務器拿公鑰就不只是拿公鑰而是拿整個證書,此時客戶端就可以憑借證書中的數字簽名對證書的合法性進行驗證

  • 客戶端如何驗證數字簽名?
  1. 客戶端把證書中的各個字段再算一遍校驗和,得到checksum1
  2. 客戶端使用公證機構的公鑰,對數字簽名進行解密,得到checksum2
  3. 對比checksum1 == checksum2 如果相等則視為當前證書的各個字段就是和服務器這邊發出來的證書是一模一樣的,此時就可以認為這是合法證書

    如果不相等則意味著證書上的內容被中間的黑客篡改過了,此時瀏覽器往往就會彈出警告頁面,提示用戶該網站不安全
  • 當前客戶端所拿的公證機構的公鑰,客戶端是如何確定這個公鑰是正確的而不是黑客偽造的?
    操作系統(如 Windows、Linux、macOS)和瀏覽器(如 Chrome、Firefox)在開發時,會將一些知名且權威的 CA 機構的根證書預先內置到系統或應用程序中。這些根證書包含了 CA 機構的公鑰信息。 當客戶端收到一個證書時,它會從根證書開始,按照證書鏈的順序進行驗證。例如,Windows 系統的證書存儲區中就包含了眾多受信任的 CA 根證書,瀏覽器在驗證證書時會參考這些內置的根證書信息。

  • 黑客可不可以篡改數據后同時更新數字簽名,讓數字簽名解密出來的checksum2和篡改過的checksum1一致呢?
    黑客篡改數據后,若想重新生成數字簽名,必須使用公證機構的私鑰進行加密——而這個私鑰是黑客無法獲取的。
    如果黑客試圖使用自生成的私鑰呢?客戶端使用公證機構的公鑰將無法解密。
    此時,解密失敗會被系統識別為證書異常,從而觸發明顯的安全警告彈窗。

4.4?非對稱加密 + 對稱加密 + 證書認證

在客戶端和服務器剛一建立連接的時候,服務器給客戶端返回一個證書,這個證書包含了剛才的公鑰,也包含了網站的身份信息

當客戶端獲取到這個證書之后,會對證書進行校驗(防止證書是偽造的)

  • 判定證書的有效期是否過期
  • 判斷證書的發布機構是否受信任(操作系統已內置的受信任的證書發布機構)
  • 驗證證書是否被篡改:從系統中拿到該證書發布機構的公鑰,對簽名進行解密,得到一個hash值(稱為數據摘要),設為hash1,然后計算整個證書的hash值,設為hash2,對比hash1和hash2是否相等,如果相等,則說明證書沒有被篡改過

5.常見問題

5.1 Fiddler等抓包工具,為啥能解析HTTPS的數據?

要解密數據必須獲取對稱密鑰,而Fiddler就是通過中間人攻擊來實現這一點的。當我們開啟HTTPS選項時,系統會彈出對話框詢問是否信任Fiddler提供的證書,一旦選擇信任就允許了中間人攻擊拿到了對稱密鑰

  • 生成自簽名根證書,經用戶安裝后獲客戶端信任,替換服務器證書;
  • 攔截握手階段的預主密鑰和隨機數,算出會話密鑰(對稱密鑰);
  • 用會話密鑰解密通信數據,實現解析。

5.2 中間人有沒有可能篡改該證書?

  • 中間人篡改了證書的明文
  • 由于他沒有CA機構的私鑰,所以無法hash之后用私鑰加密形成簽名,那也就沒辦法對篡改后的證書形成匹配的簽名
  • 如果強行篡改,客戶端收到該證書后會發現明文和簽名解密后的值不一致,則說明證書已被篡改,證書不可信,從而終止向服務器傳輸信息,防止信息泄露給中間人

5.3?中間人整個掉包證書呢?

  • ?因為中間人沒有 CA 私鑰,因此無法生成與CA簽名相同的加密哈希值。所以無法制作假的證書。
  • 所以中間人只能向 CA 申請真證書,然后用自己申請的證書進行掉包。這個確實能做到證書的整體掉包,但是別忘記,證書明文中包含了域名等服務端 認證信息,如果整體掉包,客戶端依舊能夠識別出來。
  • 永遠記住:中間人沒有 CA 私鑰,所以對任何證書都無法進行合法修改,包括自己的。

5.4?為什么摘要內容在網絡傳輸的時候一定要加密形成簽名??

常見的摘要算法有:MD5和SHA系列
以MD5為例,我們不需要研究具體的計算簽名的過程,只需要了解MD5的特點:

  • 定長:無論多長的字符串,計算出來的MD5值都是固定長度(16字節版本或者32字節版本)
  • 分散:源字符串只要改變一點點,最終得到的MD5值都會差別很大。
  • 不可逆:通過源字符串生成MD5很容易,但是通過MD5還原成原串理論上是不可能的.

正因為MD5有這樣的特性,我們可以認為如果兩個字符串的MD5值相同,則認為這兩個字符串相同。?


理解判定證書篡改的過程:(這個過程就好比判定這個身份證是不是偽造的身份證)
假設我們的證書只是一個簡單的字符串hello,對這個字符串計算hash值(比如md5),結果為
BC4B2A76B9719D91
如果hello中有任意的字符被篡改了,比如變成了hella,那么計算的md5值就會變化很大.
BDBD6F9CF51F2FD8
然后我們可以把這個字符串hello和哈希值BC4B2A76B9719D91從服務器返回給客戶端,此時客戶端
如何驗證hello是否是被篡改過?
那么就只要計算hello的哈希值,看看是不是BC4B2A76B9719D91即可.

但是還有個問題,如果黑客把hello篡改了,同時也把哈希值重新計算下,客戶端就分辨不出來了呀.

所以被傳輸的哈希值不能傳輸明文,需要傳輸密文。
所以,對證書明文(這里就是“hello”)hash形成散列摘要,然后CA使用自己的私鑰加密形成簽名,將hello和加密的簽名合起來形成CA證書,頒發給服務端,當客戶端請求的時候,就發送給客戶端,中間人截獲了,因為沒有CA私鑰,就無法更改或者整體掉包,就能安全的證明,證書的合法性。
最后,客戶端通過操作系統里已經存的了的證書發布機構的公鑰進行解密,還原出原始的哈希值,再進行校驗.

5.5?為什么簽名不直接加密,而是要先 hash 形成摘要??

?這是因為,可能有的簽名是很長的,直接加密會造成不必要的損失。而先 hash 可以縮小簽名密文的長度,加快數字簽名的驗證簽名的運算速度。

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

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

相關文章

2024年深度學習技術主要發展分析

摘要:深度學習作為人工智能領域的戰略級技術,在2024年持續取得突破性進展,持續重構現代戰爭規則,成為大國軍事智能化競爭的核心角力點。對2024年深度學習技術熱門領域的主要發展進行了綜合評述。研究了深度學習技術的發展現狀&…

Swift 枚舉:深入理解與高效使用

Swift 枚舉:深入理解與高效使用 引言 Swift 枚舉(Enum)是 Swift 編程語言中的一種基本數據類型,它允許我們將一組相關的值組合在一起。枚舉在 Swift 中有著廣泛的應用,從簡單的數據分類到復雜的業務邏輯處理,枚舉都能發揮巨大的作用。本文將深入探討 Swift 枚舉的原理、…

從大模型到云游戲,國鑫SY8108G-G4如何化身“全能AI引擎”?

當大模型參數量突破萬億級,傳統服務器在散熱枷鎖與擴展瓶頸前舉步維艱。國鑫全新推出的 SY8108G-G4 8U8卡AI服務器 ,以顛覆性架構支持8張600W GPU全速并行,結合CPU-GPU直連、冗余電源和彈性擴展三大優勢,為AI訓練、生成式創作、數…

在多個DHCP服務器的網絡環境中選擇指定的DHCP服務

問題 學校有兩個網絡,我電腦網線插在同一個交換機的同一個接口上,有時候獲取的是172.27開頭的IP,有時候獲取的是192.168開頭的IP。 通常第一次開機獲取的是172.27的IP,插拔網線或重啟網絡接口后會變為192.168的IP。 兩個網絡各有…

【Nginx】實測Nginx增加第三方主動式健康檢查模塊

一、環境說明系統版本:CentOS 7.9內核版本:3.10.0-1160.119.1Nginx版本:1.26.3第三方檢測模塊及版本:nginx_upstream_check_module(v0.4.0,兼容nginx 1.20)二、nginx安裝部署2.1 下載檢測模塊目…

pytest中mark的使用

在pytest中,mark(標記)是用于對測試用例進行分類、篩選或附加元數據的重要功能。以下是其核心使用方法: 1. ?基本標記定義與使用? ?注冊標記?:在pytest.ini中預先定義標記(避免運行時警告)&…

STM32N6--NPU簡單介紹

關鍵詞:STM32N6、生物神經元、神經網絡處理單元(NPU)、數據流處理 參考鏈接: RM0486 Reference manual STM32N647/657xx Arm-based 32-bit MCUsST_中文論壇【資料合集】STM32N6超全資料合集(定期更新)B站_…

一款開源免費、通用的 WPF 主題控件包

前言 今天大姚給大家分享一款開源免費(MIT License)、通用的 WPF 主題控件包:Rubyer WPF。 WPF介紹 WPF是一個強大的桌面應用程序框架,用于構建具有豐富用戶界面的 Windows 應用。它提供了靈活的布局、數據綁定、樣式和模板、動…

windows安裝python環境以及對應編輯器的詳細流程

windows安裝python環境以及對應編輯器的詳細流程 一、安裝 Python 環境 步驟 1:下載 Python 安裝包 訪問 Python 官網:https://www.python.org/downloads/windows/選擇最新穩定版本(如 Python 3.12.x),點擊 Download W…

高保真組件庫:下拉多選

制作一個高保真的下拉多選需要具備多種交互事件。 拖拽一個文本框并命名為“下拉文本輸入框”和一個向下的箭頭組合在一起,外觀上看起來是下拉組件。為了美觀調整一些邊框顏色、圓角、文字左邊距等。 拖拽一個矩形作為下拉選項的容器,啟動陰影xy都為0 制作下拉選項:拖拽一個…

sqli-labs靶場通關筆記:第1-4關 聯合注入

第1關:單引號閉合1.這是第1關的界面,讓我們以id作為參數輸入,方式為數值,這里輸入?id1看一下。2.顯示了id1的用戶名和密碼。分析:在sql注入漏洞中,第一步是要尋找注入點,即可以輸入參數的地方&…

和服腰封改造:3種解構主義造型的東方美學新解

和服腰封改造:3種解構主義造型的東方美學新解在東京原宿的小巷里,一場關于和服腰封的"溫柔革命"正在悄然發生。年輕設計師們將傳統寬腰帶拆解重構,創造出既保留東方神韻又充滿當代氣息的造型藝術。正如一位新銳設計師所說&#xff…

什么是強化學習(RL)--3

如果reward大多數情況下都是0,只有少數是很大的值。這種情況下就是稀疏reward的問題。比如你要教機械手臂拴螺絲,只有最后把螺絲栓進去才可以,其余機械手臂的位置都不可以。額外的reward幫agent學習。reward shaping射擊游戲cs,這個游戲中&am…

彩虹云商城全解源碼系統|人工客服系統

核心升級亮點 人工客服系統:新增智能工單在線IM雙模式多端同步:PCH5小程序APP四端數據實時互通支付升級:支持數字人民幣收款安全加固:內置Web應用防火墻(WAF) 部署教程 ? B站視頻教程 包含: 寶塔環境配置&#xf…

川翔云電腦:突破硬件極限,重構設計生產力范式

一、硬核配置:顯存與算力的雙重革命川翔云電腦提供從 RTX 2080 Ti 到 RTX 4090 Plus 的全系列 GPU 機型,其中旗艦級 4090 Plus 單卡配備48GB 超大顯存,較傳統 4090 顯存翻倍,可流暢加載 1200 萬面數的超復雜模型(如《黑…

深入解析 TCP 連接狀態與進程掛起、恢復與關閉

文章目錄深入解析 TCP 連接狀態與進程掛起、恢復與關閉一、TCP 連接的各種狀態1. **LISTEN**(監聽)2. **SYN_SENT**(SYN 已發送)3. **SYN_RECEIVED**(SYN 已接收)4. **ESTABLISHED**(已建立&…

在mac m1基于llama.cpp運行deepseek

lama.cpp是一個高效的機器學習推理庫,目標是在各種硬件上實現LLM推斷,保持最小設置和最先進性能。llama.cpp支持1.5位、2位、3位、4位、5位、6位和8位整數量化,通過ARM NEON、Accelerate和Metal支持Apple芯片,使得在MAC M1處理器上…

多模態大語言模型arxiv論文略讀(154)

Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ?? 論文標題:Visual-Oriented Fine-Grained Knowledge Editing for MultiModal Large Language Models ?? 論文作者:Zhen Zeng, Leijiang Gu, Xun Yang, Zhan…

Python PDF處理庫深度對比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的關系與區別

Python PDF處理庫深度對比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的關系與區別前言1. 庫的基本介紹1.1 PyMuPDF (fitz)1.2 pypdfium21.3 pdfplumber1.4 pdfminer2. 關系圖譜3. 核心區別對比3.1 性能對比3.2 功能對比4. 代碼示例對比4.1 基本文本提取PyMuPDFpypd…

制作 ext4 文件系統

按以下步驟操作可以將一個文件夾制作成 Android 可用的 ext4 格式的 img 文件:方法 1:使用標準 Linux 工具(推薦) 步驟 1:安裝必要工具 sudo apt update sudo apt install e2fsprogs android-sdk-libsparse-utils # 適…