計算機網絡 —— HTTPS 協議

前一篇文章:計算機網絡 —— HTTP 協議(詳解)-CSDN博客

目錄

·前言

一、HTTPS 協議簡介

二、HTTPS 工作過程

1.對稱加密

2.非對稱加密

3.中間人攻擊

4.引入證書

三、HTTPS 常見問題

1.中間人能否篡改證書?

2.中間人能否調包證書?

3.HTTPS 工作完整流程

·總結


·前言

? ? ? ? 前一篇文章中對?HTTP 協議整體做了一個基本介紹,在本篇文章里將介紹一下基于 HTTP 協議創造出來的 HTTPS 協議,關于 HTTPS 協議的重點內容就是它的一個工作過程,它是如何保證我們網絡中傳輸數據的安全性呢?這將是本篇文章的要重點介紹的內容,下面就開始本篇文章的內容介紹。

一、HTTPS 協議簡介

? ? ? ? HTTPS 協議與 HTTP 協議一樣都是應用層協議,HTTPS 協議是在 HTTP 協議的基礎上引入了一個加密層,由于 HTTP 協議的內容都是按照文本的方式明文傳輸,這就導致在使用 HTTP 協議傳輸數據的過程中會出現一些數據被篡改的情況,比如:“運營商劫持”。

? ? ? ? 什么是 “運營商劫持” 呢?不知道有沒有小伙伴在網上搜索某個軟件點擊下載后發現下的不是要下載的軟件而是其他軟件,這就是 “運營商劫持”,如下圖所示:

圖1
圖2

? ? ? ? 如上圖所示,當我們下載一個 “天天動聽” 時,圖1 未被劫持點擊下載按鈕是可以彈出正確的天天動聽的鏈接,圖2 已被劫持時,點擊下載按鈕,彈窗的是 QQ瀏覽器的下載鏈接,這就是 “運營商劫持”,那么它是如何做到的呢?流程如下圖所示:

?????????當然,不止運營商可以劫持,其他的 “黑客” 也可以用類似的手段來進行劫持,竊取用戶的隱私信息,或者篡改內容,所以在互聯網上,明文傳輸是比較危險的事情,HTTPS 就是在 HTTP 的基礎上進行了加密,進一步來保證用戶的信息安全。

? ? ? ? 解決安全問題最核心的要點就是 “加密”,什么是加密呢?加密就是把明文(要傳輸的真實數據)進行一系列變換,生成密文(針對明文加密之后得到的結果,往往不直觀,不易理解),解密就是把密文通過一系列變換,還原成明文,在這個加密與解密的過程中,往往需要一個或者多個中間的數據來輔助完成這個過程,這樣的數據就被稱為 “密鑰”。

二、HTTPS 工作過程

? ? ? ? 為了保證數據的安全,HTTPS 就在 HTTP 基礎上進行 “加密” 操作,這樣網絡上傳輸的數據就不再是直接傳輸明文了,而是加密之后的 “密文”,加密的方式有很多,但是整體可以分為兩大類:“對稱加密” 和 “非對稱加密”,下面我就來介紹一下 HTTPS 的工作過程,及遇到問題的對應解決方法。

1.對稱加密

? ? ? ? 對稱加密其實就是通過同一個 “密鑰”,來把明文加密成密文,并且還可以把密文加密成明文,引入對稱加密之后,即使數據被截獲,由于黑客不知道密鑰是什么,也就無法進行解密進一步去獲取我們請求的真實內容了,引入對稱加密后,此時數據傳輸過程如下圖所示:

? ? ? ? 根據上述介紹可以發現對稱加密具有以下特點:

  • 使用對稱加密,客戶端與服務器需要使用同一個密鑰;
  • 不同的客戶端需要使用不同的密鑰(如果密鑰都相同,那么黑客就可以獲取密鑰)。?

? ? ? ? 此時,由于不同客戶端使用的密鑰都不相同,這就意味著服務器需要維護每個客戶端和密鑰的關聯關系會引入很大的額外開銷。

? ? ? ? 對稱加密除了會引入額外的開銷還有一個致命的問題,那就是這種加密并不安全,由于對稱密鑰是要傳輸給對方的,就意味著傳輸密鑰的過程是明文傳輸的,那么此時黑客只要獲取到傳輸的密鑰,對稱加密的操作就毫無意義了,如下圖所示:

? ? ? ? ?造成上圖結果就是因為使用明文傳輸密鑰,黑客就會獲取到密鑰,后續的加密操作就形同虛設了,所以我們需要對傳輸的密鑰進行加密傳輸,如果我們對密鑰仍進行對稱加密的方式進行傳輸就需要確定一個 “密鑰的密鑰”,此時面臨的問題還是 “密鑰的密鑰” 是明文,黑客仍然可以拿到密鑰,所以對密鑰進行加密傳輸使用對稱加密的方式就行不通了,這就需要引入非對稱加密。

2.非對稱加密

? ? ? ? 使用非對稱加密主要目的就是為了對 “對稱加密” 的密鑰進行加密,來確保對稱密鑰的安全性,在非對稱加密中要用到兩個密鑰:“公鑰” 與 “私鑰”,公鑰和私鑰是配對的(公鑰對明文加密變成密文,密文只能使用配對的私鑰來進行解密),它們最大的缺點就是加密與解密的運算速度非常慢(消耗 CPU 資源),所以不能完全使用非對稱加密來對傳輸的數據進行加密,而只是對“對稱加密”的密鑰進行加密。

? ? ? ? 引入非對稱加密之后,就可以由服務器生成公鑰和私鑰,公鑰可以公開給每個客服端,私鑰只有自己知道,這樣客戶端就可以使用公鑰對對稱密鑰進行加密然后傳輸給服務器,服務器獲取到密文使用私鑰解密獲取到對稱密鑰,后面就可以繼續使用對稱加密來進行數據傳輸了,具體過程如下圖所示:

? ? ? ? 下面我來對上述過程做一個梳理:

  1. ?客戶端在本地生成對稱密鑰,通過公鑰加密,發送給服務器;
  2. 由于黑客沒有私鑰所以無法對截取的數據進行解密進而無法獲取對稱密鑰;
  3. 服務器使用私鑰解密,獲取對稱密鑰,使用對稱密鑰加密給客戶端返回的響應;
  4. 后續客戶端與服務器的通信使用對稱加密即可,由于該密鑰只有客戶端與服務器兩個主機知道,所以黑客截獲數據也無法進行解密。

? ? ? ? 上述過程雖然看起來安全,但是還有漏洞,由于公鑰是需要客戶端從服務器這邊獲取,那么就存在一個問題:獲取的公鑰是不是黑客偽造的?這就涉及到中間人攻擊了。?

3.中間人攻擊

? ? ? ? 黑客通過中間人攻擊就可以獲取到對稱密鑰,由于非對稱加密算法是公開的,所以黑客也可以使用非對稱加密算法來得到自己的公鑰私鑰,此時就可以在客戶端向服務器發送獲取公鑰的請求時進行中間人攻擊,具體過程如下圖所示:

?????????下面我來對上述過程做一個梳理:

  1. 服務器使用非對稱加密算法生成公鑰:pub1,私鑰:pri1;
  2. 黑客使用非對稱加密算法生成公鑰:pub2,私鑰:pri2;
  3. 客戶端生成對稱密鑰:key;
  4. 客戶端向服務器發送請求詢問公鑰是什么?
  5. 服務器明文傳輸公鑰 pub1 給客戶端;
  6. 黑客截取數據,提取公鑰 pub1 并保存,然后將數據中的公鑰 pub1 替換成自己的公鑰 pub2,并將偽造的數據發給客戶端;
  7. 客戶端收到數據,提取公鑰 pub2(并不清楚公鑰已經被換),用公鑰 pub2 加密對稱密鑰 key,形成報文發送給服務器;
  8. 黑客截取數據,直接使用自己的私鑰 pri2 進行解密,獲取到對稱密鑰 key,再使用保存的服務端公鑰 pub1 加密后,將報文發送給服務器;
  9. 服務器拿到報文后,使用私鑰 pri1 進行解密,獲取對稱密鑰 key;
  10. 后續服務器與客戶端都使用 key 進行對稱加密,進行通信,此時黑客就可以使用對稱密鑰 key 劫持數據對數據進行竊聽或者修改。

????????那么如何解決中間人攻擊這樣的問題呢?最關鍵的一點就在于客戶端拿到公鑰的時候要有辦法驗證這個公鑰是真的而不是黑客偽造的,這就需要服務器提供一個 “證書”。?

4.引入證書

? ? ? ?證書是一個結構化的數據,其中包含很多的信息,如:證書發布機構、證書有效期、公鑰、證書所有者、簽名……,服務器在使用 HTTPS 之前需要向第三方公正機構申請一份數字證書,然后服務器把證書傳給瀏覽器,瀏覽器從證書中獲取公鑰就可以了,證書就相當于身份證,證明當前公鑰的正確性。

? ? ? ? 在證書中,用來驗證證書真偽的信息就是 “簽名”,對于簽名要詳細介紹一下,這是通過證書解決中間人攻擊問題的關鍵,簽名的形成也是基于非對稱加密算法的,當服務端申請證書的時候,公正機構就會對服務端進行審核,并專門為該網站形成數字簽名,過程如下:

  1. 公正機構擁有非對稱加密的公鑰:A 和私鑰:A*;
  2. 公正機構對服務端申請的證書明文數據進行 hash,形成數據摘要;
  3. 公正機構再對數據摘要用私鑰 A* 加密,得到簽名 S。

? ? ? ? 此時,服務端申請的證書明文與簽名 S 就共同形成了證書,這樣的證書就頒布給了服務端。這樣就可以解決中間人攻擊問題,此時數據傳輸的過程如下圖所示:

? ? ? ? 圖中客戶端獲取到證書對證書進行校驗的過程如下:

  1. 判定證書有效期是否過期;
  2. 判定證書的發布機構是否受信任(操作系統中已經內置了受信任的證書發布機構);
  3. 驗證證書是否被篡改:從操作系統中獲取證書發布機構的公鑰,對簽名進行解密,得到 hash 值(數據摘要)設為 hash1,然后計算整個證書的 hash 值設為 hash2,對比 hash1 和 hash2 是否相等,如果相等就說明證書沒有被篡改過。?

三、HTTPS 常見問題

1.中間人能否篡改證書?

? ? ? ? 中間人無法篡改證書,理由如下:

  • 中間人篡改了證書的明文,由于他沒有公正機構的私鑰,所以無法在?hash 之后使用私鑰形成簽名,那么就無法對篡改后的證書形成匹配的簽名;
  • 如果中間人強行篡改,客戶端收到證書后在驗證時就會發現證書明文的 hash 值與簽名解密后得到的 hash 值不一樣,就會發現證書被篡改,從而終止向服務器傳輸信息。?

2.中間人能否調包證書?

? ? ? ? 中間人無法調包整個證書,理由如下:

  • 中間人沒有公正機構的私鑰,所以無法制作假的證書;
  • 中間人只能向公正機構申請真證書,然后使用自己申請的證書進行掉包;
  • 但是證書中明文包含了域名等服務端認證信息,所以整體調包客戶端依舊可以識別。

? ? ? ? 我們要知道,中間人沒有公正機構的私鑰對任何證書都無法進行合法修改,包括自己的。?

3.HTTPS 工作完整流程

? ? ? ? 左側是客戶端要做的事,右側是服務器要做的事,完整流程如下圖所示:

·總結

? ? ? ? 文章到此就要結束了,本篇文章重點介紹了 HTTPS 的工作過程,在這里涉及到的密鑰一共有三組,如下所示:

  • 第一組(非對稱加密):用于校驗證書是否被篡改,服務器持有私鑰(私鑰在注冊證書時獲得),客戶端持有公鑰(操作系統包含了可信任的認證機構有哪些,同時持有對應的公鑰),服務器使?這個私鑰對證書的簽名進行加密,客戶端通過這個公鑰解密獲取到證書的簽名,從?校驗證書內容是否是篡改過;
  • 第二組(非對稱加密):用于協商?成對稱加密的密鑰,服務器生成這組 私鑰-公鑰 對,然后通過證書把公鑰傳遞給客戶端,然后客戶端用這個公鑰給?成的對稱加密的密鑰加密,傳輸給服務器,服務器通過私鑰解密獲取到對稱加密的密鑰;
  • 第三組(對稱加密):客戶端和服務器后續傳輸的數據都通過這個對稱密鑰加密解密。

? ? ? ? ?切的關鍵都是圍繞這個對稱加密的密鑰,其他的機制都是輔助這個密鑰?作的,第二組非對稱加密的密鑰是為了讓客戶端把這個對稱密鑰傳給服務器,第一組非對稱加密的密鑰是為了讓客戶端拿到第二組非對稱加密的公鑰,如果你認為讀了本篇文章您有所收獲,希望給本篇文章點個贊,收藏走一波,后面我會繼續與大家分享計算機網絡的相關知識,關注博主不迷路~~~您的支持就是我創作最大的動力,我們下一篇文章再見~~~

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

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

相關文章

定點數的乘除運算

原碼一位乘法 乘積的符號由兩個數的符號位異或而成。(不參與運算)被乘數和乘數均取絕對值參與運算,看作無符號數。乘數的最低位為Yn: 若Yn1,則部分積加上被乘數|x|,然后邏輯右移一位;若Yn0&…

如何設置ChromeDriver路徑?

設置ChromeDriver路徑是為了讓Selenium能夠正確地調用Chrome瀏覽器進行自動化操作。以下是幾種設置ChromeDriver路徑的方法: 1. 系統環境變量 將ChromeDriver的路徑添加到系統的環境變量中,這樣在任何地方都可以直接調用ChromeDriver。 Windows系統&a…

數據挖掘:一、Weka軟件的基本操作

實驗目的和要求 了解Weka軟件的使用 實驗環境 Windows11 Weka3.8.6 實驗內容與過程 實驗內容 1、了解Weka使用的一般步驟 2、利用Weka,對數據集進行關聯規則挖掘及數據分類 3、記錄操作步驟、使用的數據、最終的結果 實驗過程 首先打開weka下載官網,選擇合適

【從零開始的LeetCode-算法】383. 贖金信

給你兩個字符串:ransomNote 和 magazine ,判斷 ransomNote 能不能由 magazine 里面的字符構成。 如果可以,返回 true ;否則返回 false 。 magazine 中的每個字符只能在 ransomNote 中使用一次。 示例 1: 輸入&#…

【第二十四周】從大語言模型到多模態大模型的發展

摘要 大語言模型(Large Language Model, LLM)是指一類基于深度學習的人工智能系統,它們被設計用來理解和生成自然語言。這些模型通常是在大量的文本數據上進行訓練的,通過學習文本中的模式和結構,它們能夠執行各種各樣…

https ssl免費證書申請,自動續期,acme、certd

本文為個人筆記,方便自己需要時查閱,同時提供出來給大家作為免費ssl證書自動續簽需求的一種參考 大部分免費證書的有效期僅有3個月,所以證書管理會涉及到自動續期管理的問題 一、acme證書 大佬們常用的證書證書申請管理方式,提…

uniapp的生命周期

在 UniApp 中,生命周期函數是指在組件(如頁面、視圖等)創建和銷毀過程中會自動觸發的一些函數。UniApp 提供了多種生命周期函數,幫助開發者在適當的時機進行相關的邏輯處理。 UniApp 的生命周期函數可以分為 頁面生命周期 和 組件…

unity打包到安卓幀率降低

這個問題遇到過很多次了我的做法就是直接設置Application.targetFrameRate60 參考

【Vue】v-model、ref獲取DOM

目錄 v-moel v-model的原理 v-model用在組件標簽上 方式 defineModel()簡寫 ref屬性 獲取原生DOM 獲取組件實例 nextTick() v-moel v-model:雙向數據綁定指令 數據變了,視圖跟著變(數據驅動視圖)視圖變了,數…

Kubernetes 常用操作大全:全面掌握 K8s 基礎與進階命令

Kubernetes(簡稱 K8s)作為一種開源的容器編排工具,已經成為現代分布式系統中的標準。它的強大之處在于能夠自動化應用程序的部署、擴展和管理。在使用 Kubernetes 的過程中,熟悉常用操作對于高效地管理集群資源至關重要。本文將詳…

sqlmap --os-shell的原理(MySQL,MSSQL,PostgreSQL,Oracle,SQLite)

1. MySQL 條件 數據庫用戶需要具備高權限(如 FILE 權限)。數據庫服務運行用戶需要對目標目錄有寫權限。Web 服務器有可寫目錄,且支持執行上傳的腳本(如 PHP、JSP 等)。 原理 利用 MySQL 的 SELECT ... INTO OUTFIL…

Springboot 2.x 升級到Springboot 2.7.x問題匯總

Springboot 2.x 升級到Springboot 2.7.x問題 Springboot 2.x 升級到Springboot 2.7.x問題匯總 不廢話 上干貨 改變 1.mysql依賴groupId和artifactId更改&#xff1b; <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</…

【計算機網絡】實驗13:運輸層端口

實驗13 運輸層端口 一、實驗目的 本次實驗旨在驗證TCP和IP運輸層端口號的作用&#xff0c;深入理解它們在網絡通信中的重要性。通過實驗&#xff0c;我將探討端口號如何幫助區分不同的應用程序和服務&#xff0c;使得在同一臺主機上能夠同時運行多個網絡服務而不發生沖突。此…

【Redis】Redis基礎——Redis的安裝及啟動

一、初識Redis 1. 認識NoSQL 數據結構&#xff1a;對于SQL來說&#xff0c;表是有結構的&#xff0c;如字段約束、字段存儲大小等。 關聯性&#xff1a;SQL 的關聯性體現在兩張表之間可以通過外鍵&#xff0c;將兩張表的數據關聯查詢出完整的數據。 查詢方式&#xff1a; 2.…

vuex 是什么?怎么使用?哪種功能場景使用它?

Vuex是Vue.js的狀態管理庫。它可以用來管理應用程序中的共享狀態&#xff0c;并提供了一種集中式的方式來管理狀態的變化。 使用Vuex&#xff0c;首先需要安裝它&#xff1a; npm install vuex --save然后&#xff0c;在Vue應用程序的入口文件中&#xff0c;導入Vuex并在Vue實…

ElK 8 收集 MySQL 慢查詢日志并通過 ElastAlert2 告警至飛書

文章目錄 1. 說明2. 啟個 mysql3. 設置慢查詢4. filebeat 設置5. 觸發慢查詢6. MySQL 告警至飛書 1. 說明 elk 版本&#xff1a;8.15.0 2. 啟個 mysql docker-compose.yml 中 mysql&#xff1a; mysql:# restart: alwaysimage: mysql:8.0.27# ports:# - "3306:3306&q…

PyTorch基本使用-張量的索引操作

在操作張量時&#xff0c;經常要去獲取某些元素進行處理或者修改操作&#xff0c;在這里需要了解torch中的索引操作。 準備數據&#xff1a; data torch.randint(0,10,[4,5]) print(data--->,data)輸出結果&#xff1a; data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …

【服務器監控】grafana+Prometheus+node exporter詳細部署文檔

我們在進行測試時&#xff0c;不可能一直手動看著服務器的性能消耗&#xff0c;這時候就需要有個工具替我們監控服務器的性能消耗。這里記錄下grafanaPrometheusnodeExporter的組合用于監控服務器。 簡單介紹&#xff1a; grafana&#xff1a;看板工具&#xff0c;所有采集的…

第十七章 使用 MariaDB 數據庫管理系統

1. 數據庫管理系統 數據庫是指按照某些特定結構來存儲數據資料的數據倉庫。在當今這個大數據技術迅速崛起的年代&#xff0c;互聯網上每天都會生成海量的數據信息&#xff0c;數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式&#xff0c;發展到了現如今存儲海量…

Jenkins授權策略的配置

簡介:在Jenkins中,通過系統管理下的“Manage and Assign Roles”以及“Manage Roles”來配置角色,是實現權限管理的關鍵步驟。以下是關于這兩個功能配置角色時的意義及注意事項的詳細解釋: 一、配置角色的意義 實現權限控制: 通過創建和分配角色,可以精確地控制不同用戶…