【HTTPS協議】

文章目錄

  • 一、HTTPS
  • 二、HTTPS協議五種加密方案
    • 1.只使用對稱加密
    • 2.只使用非對稱加密
    • 3.雙方都使用非對稱加密
    • 4.對稱加密+非對稱加密
      • 中間人攻擊
      • 理解數字簽名
      • CA機構和證書
    • 5. 對稱加密+非對稱加密+證書認證
      • 中間人篡改證書?
      • 中間人調包整個證書?
  • 常見問題
  • 總結


一、HTTPS

HTTPS協議其實就是將HTTP協議中發送的報文和接收的報文經過加密后發送出去。
這就是HTTPS協議。

  • 加密就是將一個原文經過一系列變換變成另一個密文。
  • 解密就是將一個密文經過一系列變換變回原文。

二、HTTPS協議五種加密方案

1.只使用對稱加密

對稱加密,對稱加密就是通信雙方都持有同一個密鑰。
假如這個密鑰沒有被其他人知道的話,這樣通信雙方就會是安全的。

但是沒有假如,對稱密鑰也就是只持有一個公鑰,這個公鑰通過客戶端發送給服務器時,要經過網絡,極易被其他人獲取到,這樣雙方的通信就不安全了。

并且,如果是客戶端持有公鑰的話,每個客戶端對應發送一個公鑰給客戶端,服務器同時連接成千上萬個客戶端,這樣就需要保存和管理多份公鑰數據對象,這也是一個比較麻煩且耗時的問題。

所以理想的做法是,在進行通信前,就進行密鑰協商。

但是如果直接把密鑰明文傳輸, 那么黑客也就能獲得密鑰了,此時后續的加密操作就形同虛設了
因此密鑰的傳輸也必須加密傳輸

但是要想對密鑰進行對稱加密, 就仍然需要先協商確定一個 “密鑰的密鑰”. 這就成了 “先有雞還是先有蛋” 的問題了. 此時密鑰的傳輸再用對稱加密就行不通了

不過由于只有一個公鑰進行加密解密,所以速度非常快,算法不復雜,如果在安全的前提下,使用對稱加密是非常高效的。

2.只使用非對稱加密

非對稱密鑰是,持有一對密鑰,分別是公鑰和私鑰。
可以采用公鑰加密,私鑰解密;也可以私鑰加密,公鑰解密。

服務器與客戶端進行通信前,服務器發送公鑰給客戶端。
客戶端發送數據給服務器前,會進行加密,這樣就能保證客戶端到服務器單方面安全(其實也還有安全問題)
在這里插入圖片描述

3.雙方都使用非對稱加密

客戶端和服務器各持有一對密鑰,分別是公鑰和私鑰。

在這里插入圖片描述
雙方開始進行數據通信時,客戶端發送自己的公鑰C給服務器,服務器收到后,發送自己的公鑰S給客戶端。這樣通信兩端就持有對方的公鑰。

此時再進行數據通信時,使用對方的公鑰進行加密,雖然中間人也截取到雙方的公鑰,但是沒有私鑰,是無法解密的。這樣就保證了雙方的通信安全(真的嗎?)

看似安全了,這個方案仍然存在兩個問題:

1.不安全
2.效率低下

使用非對稱密鑰進行加密解密,會經過大量算法計算,就會比較耗時。

4.對稱加密+非對稱加密

服務器持有一對密鑰:公鑰S和私鑰S’
客戶端本地生成一個對稱密鑰C

在這里插入圖片描述

服務端具有非對稱公鑰 S 和私鑰 S’

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

這樣就大大提高了效率,因為只有一開始使用非對稱加密進行密鑰交換,后續都會使用對稱加密進行通信。

但是!

其實方案2,3,4都存在安全問題:中間人攻擊

中間人攻擊

比如方案4:

  • 1.服務器自己持有一對密鑰S和S’,中間人自己也持有一對密鑰M和M’
  • 2.客戶端發起HTTP請求時,服務器發送響應,將自己的公鑰S發給客戶端,中間人將服務器的公鑰S,替換成自己的公鑰M,繼續發給客戶端。
  • 3.客戶端將自己本地生成的對稱密鑰C,通過服務端的公鑰加密后(客戶端當然不知道已經被換了),發送給服務端。
  • 4.中間人使用自己的私鑰M’進行解密,獲取到了客戶端的對稱密鑰
  • 5.將該對稱密鑰用曾經獲取到的服務器的公鑰S加密后,繼續將報文發給服務器,服務器此時通過自己的私鑰S’,也拿到了客戶端的對稱密鑰。
  • 6.客戶端和服務器從此之后使用對稱密鑰加密通信。
  • 7.中間人對整個過程了如指掌,想監聽,竊取和篡改數據都可以了。

如上的攻擊過程同樣對方案2,3有用。

在這里插入圖片描述

問題的本質就出現在,客戶端無法確定收到含有公鑰的報文,就是服務器發過來的!!

理解數字簽名

1.將一份數據(比如10000字節),經過一些哈希函數算法計算后,得到一個散列值,這個散列值叫數據摘要(這個散列值是固定長度的)。
2.再用該散列值,拿簽名者的私鑰進行加密,得到數字簽名(比如50字節)。
3.拿原數據和簽名進行拼接(10050字節),就得到了帶有數字簽名的數據。
在這里插入圖片描述

數字簽名存在的意義,就是驗證原始的明文數據是否被篡改過。
我們知道,用哈希算法形成的數據摘要,只要原始數據修改過1個比特位,其形成的數據摘要都差別非常大的。(幾乎不可能形成重復的數據摘要)

如何驗證數字簽名?

在這里插入圖片描述

1.將原始的明文數據,進行同樣的哈希算法得到一個散列值。
2.再拿簽名者的公鑰,進行解密,得到散列值。
3.判斷兩者的散列值是否一樣,如果一樣,則數字簽名有效,即數據沒有被篡改過。


這里有很多疑問。
1.簽名者是誰?為什么要用他的簽名?我的簽名,中間人的簽名不行嗎?

如果采用中間人自己的私鑰對散列值加密,得到一個數字簽名,然后讓客戶端用中間人自己的公鑰
解密,得到相同的散列值,這樣是可以的。但問題是,客戶端不承認中間人的合法性!!!
在頒發數字簽名給服務器客戶端時,就已經內置式地通知客戶端,必須使用我給你的公鑰來對數字簽名解密,用其他任何人的公鑰解密都是無效的!!

因為世界上只有我一個人持有私鑰,意味著只有我一個人可以進行數字簽名!!
這是一種權力,誰持有大家都認可的公鑰,誰就可以簽名。

CA機構和證書

其實,CA機構就是上面數字簽名中的簽名者。

而證書的樣子如下:
證書并不是只包含一個服務器的公鑰,而是在證書中含有公鑰。

證書 = 用明文信息經過哈希算法生成數據摘要后再通過CA機構的私鑰加密生成的數字簽名 + 原始的明文信息。
在這里插入圖片描述

服務端在使用 HTTPS 前,需要向 CA 機構申領一份數字證書,數字證書里含有證書申請者信息、公鑰信息等。服務器把證書傳輸給瀏覽器,瀏覽器從證書里獲取公鑰就行了,證書就如身份證,證明服務端公鑰的權威性

證書的申請過程:
在這里插入圖片描述
1.服務器填寫資料,包括服務器自己的公鑰等信息,生成請求文件發給CA機構。
2.CA機構進行審核,審核通過后,通過數字簽名+服務器的明文信息形成證書發給申請者(服務器)
3.有客戶端建立HTTPS請求時,服務器發給客戶端的響應中就會攜帶證書。
4.客戶端提取證書的數字簽名拿內置的CA機構的公鑰對簽名解密,在對證書的明文信息進行哈希算法加密后形成的兩個散列值對比驗證證書的合法性。

只要合法了,就能進行對稱加密通信了!!


5. 對稱加密+非對稱加密+證書認證

到這里,其實已經知道了方案5的具體實現流程了。
在這里插入圖片描述
客戶端進行認證
當客戶端獲取到這個證書之后, 會對證書進行校驗(防止證書是偽造的).
? 判定證書的有效期是否過期
? 判定證書的發布機構是否受信任(操作系統中已內置的受信任的證書發布機構).
? 驗證證書是否被篡改: 從系統中拿到該證書發布機構的公鑰, 對簽名解密, 得到一個 hash 值(稱為數據摘要), 設為 hash1. 然后計算整個證書的 hash 值, 設為 hash2. 對比 hash1 和 hash2 是否相等. 如果相等, 則說明證書是沒有被篡改過的。

中間人篡改證書?

中間人如果篡改證書中的公鑰,改成自己的,客戶端在進行證書認證時,對明文信息進行哈希得到的散列值和對數字簽名進行解密(用CA機構給的公鑰)得到的散列值就不一樣,就認定證書不合法,此時客戶端就不會再對服務器進行通信了!

中間人調包整個證書?

中間人沒有CA機構的私鑰,無法用哈希后的散列值進行私鑰加密,就無法制作假證書。
想要調包整個證書,只能去申請真的證書來調包服務器的證書。
這樣做理論上可行,但是,證書中除了有公鑰信息,還有域名信息等。
域名信息也是具有唯一性的,客戶端一檢查發現域名不對,也會停止向服務器發送信息。

更何況,中間人既然是中間人,他也不會傻到泄露自己的信息去申請真證書吧。

常見問題

1.為什么用哈希算法形成的摘要在網絡中傳輸時一定要加密形成簽名?

  • 1)通過CA機構的私鑰加密形成簽名才能保證證書合法性,因為中間人無法調包證書,也無法篡改證書。
  • 2)如果不加密,直接傳輸摘要,那中間人很容易就把摘要替換調包,(可以直接替換內容,然后通過MD5等算法生成一樣的摘要)這樣就不具備安全性了。

2.為什么明文數據不直接通過CA機構的私鑰加密形成簽名,而是要先通過哈希形成摘要?

  • 這樣是為了縮小形成簽名后的長度,加快形成簽名的時間和對簽名驗證的時間,提高效率。

總結

HTTPS 工作過程中涉及到的密鑰有三組:

  • 第一組(非對稱加密):用于校驗證書是否被篡改。服務器持有CA證書,客戶端持有CA機構的公鑰(操作系統包含了可信任的CA認證機構并持有對應的公鑰),客戶端會對服務器發來的CA證書進行認證,保證證書合法性,其實就是讓客戶端信任服務器是合法的,同時也保證了服務器的公鑰是合法的。
  • 第二組(非對稱加密):用于協商生成的對稱密鑰。客戶端通過信任后的服務器公鑰加密,將客戶端本地生成的對稱密鑰加密后傳輸給服務器,服務器用自己的私鑰解密,得到對稱密鑰。
  • 第三組(對稱加密):雙方都持有對稱密鑰,此后使用對稱加密進行通信。

第一組對稱密鑰(CA的公鑰和私鑰)是為了讓客戶端拿到第二組對稱密鑰的公鑰(服務器的)
第二組對稱密鑰(服務器的公鑰和私鑰)是為了安全拿到客戶端傳輸過來的對稱密鑰。

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

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

相關文章

算法設計學習8

實驗目的及要求: 通過深入學習樹(Tree)和二叉樹(Binary Tree)這兩種重要的數據結構,掌握它們的基本概念、性質和操作,提高對樹形結構的理解和應用能力。通過本實驗,學生將深化對樹和…

P17_ResNeXt-50

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 一、模型結構 ResNeXt-50由多個殘差塊(Residual Block)組成,每個殘差塊包含三個卷積層。以下是模型的主要結構&#xff1…

【YOLO系列(V5-V12)通用數據集-剪刀石頭布手勢檢測數據集】

YOLO格式的剪刀石頭布手勢檢測數據集,適用于YOLOv5-v11所有版本,可以用于本科畢設、發paper、做課設等等,有需要的在這里獲取: 【YOLO系列(V5-V12)通用數據集-剪刀石頭布手勢檢測數據集】 數據集專欄地址&a…

基于連接池與重試機制的高效TDengine寫入方案

摘要 在時序數據庫應用場景中,如何構建穩定高效的寫入機制是核心挑戰。本文基于提供的Python代碼實現,解析一種結合連接池管理、智能重試策略和事務控制的TDengine寫入方案,并分析其技術優勢與優化方向。 一、代碼 from dbutils.pooled_db import PooledDB import timede…

抖音熱點視頻識別與分片處理機制解析

抖音作為日活數億的短視頻平臺,其熱點視頻識別和分片處理機制是支撐高并發訪問的核心技術。以下是抖音熱點視頻識別與分片的實現方案: 熱點視頻識別機制 1. 實時行為監控系統 用戶行為聚合:監控點贊、評論、分享、完播率等指標的異常增長曲線內容特征分析:通過AI識別視頻…

基于RDK X3的“校史通“機器人:SLAM導航+智能交互,讓校史館活起來!

視頻標題: 【校史館の新晉頂流】RDK X3機器人:導覽員看了直呼內卷 視頻文案: 跑得賊穩團隊用RDK X3整了個大活——給校史館造了個"社牛"機器人! 基于RDK X3開發板實現智能導航與語音交互SLAM技術讓機器人自主避障不…

Metal學習筆記十三:陰影

在本章中,您將了解陰影。陰影表示表面上沒有光。當另一個表面或對象使對象與光線相遮擋時,您會看到對象上的陰影。在項目中添加陰影可使您的場景看起來更逼真,并提供深度感。 陰影貼圖 陰影貼圖是包含場景陰影信息的紋理。當光線照射到物體…

Matplotlib:數據可視化的藝術與科學

引言:讓數據開口說話 在數據分析與機器學習領域,可視化是理解數據的重要橋梁。Matplotlib 作為 Python 最流行的繪圖庫,提供了從簡單折線圖到復雜 3D 圖表的完整解決方案。本文將通過實際案例,帶您從基礎繪圖到高級定制全面掌握 …

Python數據可視化-第4章-圖表樣式的美化

環境 開發工具 VSCode庫的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本書為《Python數據可視化》一書的配套內容,本章為第4章 圖表樣式的美化 本章主要介紹了圖表樣式的美化,包括圖表樣式概述、使用顏色、選擇線型、添加數據標記、設置字體…

嵌入式海思Hi3861連接華為物聯網平臺操作方法

1.1 實驗目的 快速演示 1、認識輕量級HarmonyOS——LiteOS-M 2、初步掌握華為云物聯網平臺的使用 3、快速驅動海思Hi3861 WIFI芯片,連接互聯網并登錄物聯網平臺

如何在Redis容量限制下保持熱點數據

如何在Redis容量限制下保持熱點數據 當數據庫有100萬條數據但Redis只能保存10萬條時,需要智能的策略來確保Redis中存儲的都是最常訪問的熱點數據。以下是幾種有效的解決方案: 一、內存淘汰策略 Redis提供了多種內存淘汰機制,當內存不足時會自動刪除部分數據: 策略命令/配…

cv2.fillPoly()和cv2.polylines()

參數解釋 cv2.fillPoly() 和 cv2.polylines() 都是 OpenCV 的函數。功能是繪制多邊形,cv2.fillPoly()可繪制實心多邊形, cv2.polylines() 可繪制空心多邊形 cv2.fillPoly()用途:提取ROI 可在黑色圖像上,填充白色,作為…

數據庫--SQL

SQL:Structured Query Language,結構化查詢語言 SQL是用于管理關系型數據庫并對其中的數據進行一系列操作(包括數據插入、查詢、修改刪除)的一種語言 分類:數據定義語言DDL、數據操縱語言DML、數據控制語言DCL、事務處…

【python】速通筆記

Python學習路徑 - 從零基礎到入門 環境搭建 安裝Python Windows: 從官網下載安裝包 https://www.python.org/downloads/Mac/Linux: 通常已預裝,可通過終端輸入python3 --version檢查 配置開發環境 推薦使用VS Code或PyCharm作為代碼編輯器安裝Python擴展插件創建第…

批量刪除git本地分支和遠程分支命令

1、按照關鍵詞開頭匹配刪除遠程分支 git branch -r | grep "origin/feature/develop-1"| sed s/origin\///g | xargs -n 1 git push origin --delete git branch -r 列出所有遠端分支。 grep "origin/feature/develop-1" 模糊匹配分支名稱包含"orig…

上市電子制造企業如何實現合規的質量文件管理?

浙江潔美電子科技股份有限公司成立于2001年,是一家專業為片式電子元器件(被動元件、分立器件、集成電路及LED)配套生產電子薄型載帶、上下膠帶、離型膜、流延膜等產品的國家高新技術企業,主要產品有分切紙帶、打孔經帶、壓孔紙帶、上下膠帶、塑料載帶及其…

leetcode數組-有序數組的平方

題目 題目鏈接:https://leetcode.cn/problems/squares-of-a-sorted-array/ 給你一個按 非遞減順序 排序的整數數組 nums,返回 每個數字的平方 組成的新數組,要求也按 非遞減順序 排序。 輸入:nums [-4,-1,0,3,10] 輸出&#xff…

基于微信小程序的醫院掛號預約系統設計與實現

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本微信小程序醫院掛號預約系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大…

密碼學基礎——DES算法

前面的密碼學基礎——密碼學文章中介紹了密碼學相關的概念,其中簡要地對稱密碼體制(也叫單鑰密碼體制、秘密密鑰體制)進行了解釋,我們可以知道單鑰體制的加密密鑰和解密密鑰相同,單鑰密碼分為流密碼和分組密碼。 流密碼&#xff0…

Redis分布式鎖詳解

Redis分布式鎖詳解 分布式鎖是在分布式系統中實現互斥訪問共享資源的重要機制。Redis因其高性能和原子性操作特性,常被用來實現分布式鎖。 一、基礎實現方案 1. SETNX EXPIRE方案(基本版) # 加鎖 SETNX lock_key unique_value # 設置唯…