HTTPS的概念和工作過程

一.HTTPS是什么

HTTPS也是一個應用層協議,是在HTTP協議的基礎上引入了一個加密層(SSL)

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

最著名的就是十多年前網絡剛發展的時期,出現“運營商劫持”,當時普遍使用的HTTP協議,因此就出現客戶端發給服務器請求,服務器返回響應的結果,在返回的過程中被運營商劫持了,運營商就更改其中某些響應的數據,再發回給客戶端

最典型的就是廣告模塊,廣告商投錢給網站,網站就會當用戶查詢后,返回其相關的廣告

其中廣告收費模式大多也是CPC(按點擊計費),那么這計算點擊次數肯定不可能只讓其中一方進行統計,而是廣告商和網站雙方都進行統計,最后核對雙方統計是否一致,如果不一致,那么程序員再來查到底是哪里出現問題

當時就經常出現,廣告商統計的次數比網站統計的次數少,那么網站方的程序員就去查程序記錄,但是怎么也沒找到問題,查詢的次數就是網站當前統計的次數,廣告商也不服氣,自己這邊明明也只被點擊了這么多次,卻要交網站多統計出來錢,最后網站也只能啞巴吃榴蓮,有苦說不出

時間一長,這種事就流傳開來了,因為不止一家網站會出現這種情況,而是許多家,最后內部人員也透露,是被運營商劫持了

即用戶發給網站請求,網站接收請求并返回響應,其中就包括廣告商的廣告,但是這個返回的響應被運營商劫持了,將其中的廣告換成跟自己運營商有利益關系的廣告商,這時再返回給用戶,那么此時用戶點擊廣告,但這個廣告不是網站返回的廣告,而是運營商劫持后修改的廣告,那么就導致網站這邊統計了廣告點擊次數,而真正的廣告商根本沒有接收到點擊,因此就出現了不一致的情況

所以網站作為反制手段,就對HTTP協議進行了加密,即HTTPS,這樣就能防止運營商對其中的內容進行篡改

二.什么是加密

要傳輸的內容叫做明文,明文經過加密,再看到的就是密文

解密則是將密文經過解密,得到的就是明文

而加密和解密的過程中,往往需要密鑰

而密鑰又往往分為公鑰和私鑰,公鑰是公開的,大家都知道的,而私鑰則是私密的,別人不知道的,公鑰是由私鑰推導而生成的

三.HTTPS的工作過程

1.引入對稱加密

首先加密方式主要有兩種:對稱加密和非對稱加密

對稱加密是指加密解密用的是同一個密鑰,這個密鑰是私鑰

非對稱加密是指加密解密用不同的密鑰,一個公鑰,一個私鑰

這兩個加密方式各有優缺點,其中非對稱加密的運輸速度非常慢,比對稱加密要慢的多

那么也許就會說,我們就選對稱加密就好了呀

但是有一個問題,即一開始客戶端和服務端要設置對稱加密的密鑰,如果客戶端說“我們使用密鑰*****”,服務端說“好的好的”

那么這兩段話是沒有使用密鑰加密的,必須要等這兩段話后,雙方才使用剛剛設定的密鑰進行加密解密,所以在這兩段對話時就有可能已經被其他人知道了,那么后面的加密解密操作也就相當于掩耳盜鈴了

如果你說那給這兩段話也進行密鑰加密,當然也可以,但是新生成的這個密鑰又要先經過雙方溝通才能知道,而這段溝通也是未被加密的,因此就陷入俄羅斯套娃的情況了

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

2.引入非對稱加密

服務端生成非對稱加密的私鑰,然后匹配出公鑰并公開給客戶端,客戶端拿到公鑰,同時生成對稱密鑰

客戶端說“我們使用對稱加密密鑰****”,然后使用非對稱加密的公鑰進行加密

而此時服務器接收到這段密文,用非對稱加密的私鑰解密,獲取到“我們使用對稱加密密鑰****”這段話,于是服務端說“好的好的”,并用對稱加密密鑰進行加密

客戶端接收到服務端的密文,用對稱加密密鑰解密得到“好的好的”

然后雙方就可以拋棄非對稱加密,使用約定的對稱加密進行對話即可

3.中間人攻擊

雖然上述使用非對稱加密后,再使用對稱加密,看起來似乎好像就安全了,但實際上并不安全

比如AB要做生意,雙方僅僅只是聽說過但沒有聯系方式,這時有個中間人C,C認識AB且有聯系方式,于是AB就讓C搭橋牽線,C也有一個朋友D,于是劇情如下

一開始AB都以為:

A找C聯系B,B來人跟A磋商,一來一回就能達成交易

實際上:

A找C聯系B,結果C卻讓D來,于是A以為D是B,將交易條件和細節告訴了D

D把A的交易條件和細節告訴B,B以為D是A,于是又將交易條件和細節告訴了D

于是一來一回,AB也能達成交易,但是神不知鬼不覺的情況下就多了一個中間人,而這個中間人把握了雙方所有的交易信息

回到客戶端和服務端上

剛剛介紹的都是雙方以為的

但實際上就有可能:

服務端生成非對稱加密的私鑰A,然后匹配出公鑰A并公開給客戶端的時候,被黑客攔下了,然后修改為公鑰B,并自己生成私鑰B,再傳給客戶端

客戶端拿到公鑰B,說“我們使用對稱加密密鑰****”,并用公鑰B加密,此時黑客用私鑰B對此解密,獲取到“我們使用對稱加密密鑰****”這段話,得到對稱加密密鑰,然后再將這段話用公鑰A加密,返回給服務端

服務端用私鑰A進行解密,獲取到“我們使用對稱加密密鑰****”這段話,于是客戶端和服務端就拋棄非對稱加密密鑰,使用對稱加密密鑰進行加密解密

但是對稱加密密鑰已經被黑客得知了,所以客戶端和服務端之間的加密也是如同虛設的,且還是在雙方毫無察覺的情況下知道的

這就是中間人攻擊

4.引入證書

中間人攻擊之所以能成功,就是因為客戶端無法分辨發來的信息是否來自服務端,同理,服務端也無法分辨發來的信息是否來自客戶端,所以要防止中間人攻擊,就必須解決識別信息來源的問題

簡單來說就是引入第三方公證機構,服務器將自己的信息發給公證機構

信息包括:證書的公證機構是誰,證書有效期多久,服務器的非對稱加密的公鑰,服務器的域名

公證機構就會對上述信息進行一些公式計算,也就是密鑰加密,得到一串數字,叫做“校驗和”,也就作為數字簽名返回給服務器

于是服務器就將信息和數字簽名發給客戶端,其中信息還是發給公證機構的信息,信息和數字簽名統稱為一張數字證書

其中信息都是明文公開的,誰都看得到

這時客戶端拿到數字證書,將信息也發給公證機構計算校驗和,如果校驗和=數字簽名,就說明這個信息未被篡改,可以信息,如果!=,則說明信息被修改了,不可信

也許你會說黑客難道就不能偽造修改證書嗎

如果黑客攔截了服務器發來的數字證書,按照往常修改信息中非對稱加密的密鑰,那么再返回給客戶端,客戶端拿到公證機構驗證,就會發現數字簽名對不上,所以不行

那黑客能不能再把數字簽名也給篡改了呢,那就是不行了,因為黑客要將自己篡改后的信息生成符合公證機構的校驗和,只有兩種選擇,一是將篡改后的信息也按正常流程去申請證書,但此時黑客的實際域名和篡改信息中服務器的域名發生沖突,公證機構拒絕頒布證書。二是獲取公證機構的私鑰,將篡改信息自己進行加密,這風險難度很大,公證機構比較是專業的,不是黑客想偷就能偷走的,如果真有這種技術,那還不如直接去偷服務器公開給客戶端公鑰對應的私鑰,然后用私鑰解密客戶端采用的對稱加密密鑰,這難度也比去偷公證機構私鑰簡單

所以綜上,就解決了中間人攻擊的問題

所以通過這一套HTTPS工作流程下來,之前出現的“運營商劫持”這種中間人攻擊就失效了,同時也基本替代了HTTP協議,如今網絡上大部分都是HTTPS協議的網站,幾乎沒有純HTTP協議的網站了

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

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

相關文章

Unity —— Android 應用構建與發布?

文章目錄1 ?Gradle模板??:了解Gradle模板的作用及使用方法,以增強對構建流程的控制。?2 ?Gradle模板變量??:參考文檔——自定義Gradle模板文件中可用的變量列表。2.1 修改Unity應用的Gradle工程文件2.1.1 通過Gradle模板文件2.1.2 導出…

【iOS】strong和copy工作流程探尋、OC屬性關鍵字復習

文章目錄前言strong和copy的區別為什么要用copy?什么時候用什么修飾?strong(ARC自動管理)strong修飾變量的底層流程圖底層代碼核心實現小結copy底層流程圖對比與strong的關鍵不同之處內部調用關系(偽代碼)小…

程序代碼篇---多循環串口程序切換

上位機版(Python)要實現根據串口接收結果高效切換四個 while 循環函數,我們可以采用狀態機模式,配合非阻塞串口讀取來設計程序結構。這種方式可以實現快速切換,避免不必要的資源消耗。下面是一個高效的實現方案&#x…

rk3568上,實現ota,計算hash,驗證簽名,判斷激活分區,并通過dd命令,寫入對應AB分區

通過自定義升級程序&#xff0c;更直觀的理解ota升級原理。 一、模擬計算hash&#xff0c;驗證簽名&#xff0c;判斷激活分區&#xff0c;并通過dd命令&#xff0c;寫入對應分區 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

數據分析—numpy庫

numpy庫NumPy 庫全面指南NumPy (Numerical Python) 是 Python 科學計算的基礎庫&#xff0c;提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。一、安裝與基礎1. 安裝 NumPypip install numpy2. 導入 NumPyimport numpy as np # 標準導入方式二、數組創建…

Vue3 setup、ref和reactive函數

一、setup函數1.理解&#xff1a;Vue3.0中一個新的配置項&#xff0c;值為一個函數。2.setup是所有Composition API(組合API)的“表演舞臺”。3.組件中用到的&#xff1a;數據、方法等等&#xff0c;均要配置在setup中。4.setup函數的兩種返回值&#xff1a;(1).若返回一個對象…

python中appium 的NoSuchElementException錯誤 原因以及解決辦法

錯誤收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus從入門到入土(四):持久層接口之BaseMapper和選裝件

大家好&#xff0c;今天繼續更新MybatisPlus從入門到入土系列&#xff0c;上一次的持久層接口還沒講完&#xff0c;只講了IService接口&#xff0c;今天我們繼續來講一下。 BaseMapper BaseMapper中的方法也比較簡單&#xff0c;都是增刪改查的基礎API&#xff0c;不知道大家還…

數組和指針的關系

在 C 語言中&#xff0c;?指針和數組有著非常緊密的聯系&#xff0c;但它們本質上是 ?不同的概念。理解它們的關系是掌握 C 語言內存操作的關鍵。下面我會從多個角度幫你梳理 ?指針和數組的直接聯系&#xff0c;并解釋它們的異同點。1. 數組和指針的本質區別?概念本質存儲方…

AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之github網站在線搜索

系列篇章?? No. 文章 1 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎的構建與初步實踐 2 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之GLM-4大模型技術的實踐探索 3 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之知乎網站數據獲取(初步實踐) 4 AI大模型探索之路…

從0到1學PHP(十二):PHP 框架入門與項目實戰

目錄一、主流 PHP 框架介紹1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的優勢二、框架基本使用&#xff08;以 Laravel 為例&#xff09;2.1 框架的安裝與配置2.2 路由定義、控制器創建、視圖渲染2.3 數據庫操作&#xff08;ORM 的使用&#xff09;三、小型項目實戰3.1 項目需求分…

MPLS LSP

一、概述上一章我們已經介紹過,LSP是MPLS報文在MPLS網絡中轉發時經過的路徑,可以看作是由報文傳輸方向節點為對應FEC分配的MPLS入標簽組成的,因為每臺設備上為每個FEC分配的入標簽是唯一 的&#xff0c;并與由下游節點為本地節點上該FEC分配的出標簽建立映射關系&#xff0c; 所…

圖像、視頻、音頻多模態大模型中長上下文token壓縮方法綜述

多模態大模型MLLMs 能夠處理高分辨率圖像、長視頻序列和冗長音頻輸入等復雜上下文&#xff0c;但自注意力機制的二次復雜度使得大量輸入 token 帶來了巨大的計算和內存需求。 如下圖&#xff0c;上&#xff1a;圖像、視頻和音頻數據類型可以在其表示維度上進行擴展&#xff0c;…

Spring MVC 九大組件源碼深度剖析(一):MultipartResolver - 文件上傳的幕后指揮官

文章目錄一、為什么從 MultipartResolver 開始&#xff1f;二、核心接口&#xff1a;定義文件上傳的契約三、實現解析&#xff1a;兩種策略的源碼較量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首選&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何實現電源控制的?

STM32的電源控制主要通過內置的電源管理模塊&#xff08;PWR&#xff09;實現&#xff0c;涵蓋電壓調節、功耗模式切換和電源監控等功能。以下是其核心機制及實現方式&#xff1a;??1. 電源架構與供電區域??STM32的電源系統分為多個供電區域&#xff0c;各司其職&#xff1…

《R for Data Science (2e)》免費中文翻譯 (第3章) --- Data transformation(1)

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

rclone、rsync、scp使用總結

數據同步工具使用總結【rclone、rsync、scp】一、數據處理背景二、數據處理方法對比1、數據關系梳理2、不同工具處理方法3、經驗總結三、工具擴展知識1、rclone工具介紹&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安裝工具及配置本地文件遷移到云上服務…

用latex+vscode+ctex寫畢業論文

文章目錄前言一、安裝latex二、安裝ctex包三、更新ctex包四、使用ctex文檔類前言 用latexvscodectex寫畢業論文。&#xff08;英文論文不用安裝ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;為中文 LATEX 文檔提供了漢字輸出支持、標點壓縮、字…

深度學習·mmsegmentation基礎教程

mmsegmentation的使用教程 mmsegmentation微調方法總結 自定義自己的數據集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注冊&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定義訓練和測試的pipeline&#xff1a;mmsegme…

InfluxDB 與 Node.js 框架:Express 集成方案(二)

四、優化與注意事項 &#xff08;一&#xff09;性能優化技巧 連接池管理&#xff1a;使用連接池可以有效減少創建和銷毀數據庫連接的開銷。在 Node.js 中&#xff0c;可以借助influx模塊結合第三方連接池庫&#xff0c;如generic-pool來實現連接池的管理 。通過設置連接池的…