網絡協議之https?

寫在前面

https協議還是挺復雜的,本人也是經過了很多次的學習,依然感覺一知半解,無法將所有的知識點串起來,本次學習呢,也是有很多的疑惑點,但是還是盡量的輸出內容,來幫助自己和在看文章的你來共同進步吧!
為了更加系統,行文采用線性的方式來進行,遇到一些點的話再單獨展開說明。接下來我們就以https協議本身作為切入點開始吧!

1:https協議的流程

在這里插入圖片描述
我們靜下心來一步步的來看啊。首先客戶端給服務端說:您好,我這邊的加密套路是這樣的,給你個隨機數,后面有用,隨機數后續使用,這個在https協議里叫client hello,接著服務端回復您好,我這邊的加密套路是這樣的,也給你個隨機數,隨機數也是后續使用,這個在https協議里叫server hello,如下方式抓包看下:
在這里插入圖片描述
抓包看如下:
在這里插入圖片描述
client hello可以看到加密套件信息:
在這里插入圖片描述
接著是服務端給客戶端發送這是我的證書,你也審核一下吧,這個過程叫client certificate,客戶端收到服務端的證書后,通過自己內置的CA證書的公鑰來解密信息,如果是能夠解密則說明服務端的證書是找了合法的CA機構生成的(合法CA機構的公鑰都是公開的,會內置在操作系統中,所以千萬不要安裝來路不明的操作系統,要不然你銀行卡里的13塊錢的余額怎么沒的都不知道)。其中加密生成簽名和驗證簽名的過程如下圖:
在這里插入圖片描述
這樣客戶端在驗證了服務端的證書后繼續后續流程,客戶端給服務端發送將隨機數字使用公鑰加密傳輸,協議里叫Client Key Exchange,注意這里的公鑰是服務端在CA機構簽過名的公鑰,即和服務端自己維護的私鑰是配對的(注意和CA的私鑰公鑰區分),服務端收到加密的隨機數字后,就可以使用自己保密存儲的私鑰來解密,獲取這個隨機數字了。接著客戶端和服務端會使用前面流程的隨機數們計算出相同的密鑰,作為后續數據交換對稱加密使用的密鑰。
獲取密鑰之后,為了確保各自的密鑰好使,會進行一些testing看下,就是下面的交互過程:
在這里插入圖片描述
最后就是正常加密通信過程了:
在這里插入圖片描述
關于證書是如何生成的我們在第二部分來看下。

2:證書

在https協議中有一個很重要的角色就是證書,什么是證書呢?證書的作用就是來證明服務的身份,以及服務端公鑰的合法性,如果是CA簽發的證書的話(背書),就是合法的證書,是能夠使用操作系統內置的CA公鑰解密的,瀏覽器會認為是其實安全的,如下:
在這里插入圖片描述
反之不安全的會提示:
在這里插入圖片描述
我們來看下這個過程,比如你創建了一個網站現在要使用https的安全傳輸協議,首先要做的就是生成網站使用的私鑰:

[root@host-10-150-27-148 x]# openssl
OpenSSL> genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....++++++
....................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:
OpenSSL> 

這樣網站的私鑰就有了(千萬要保密保存不要泄露),接著通過私鑰生成網站的證書請求文件(里面有網站公鑰信息【通過私鑰生成】,域名,郵箱等信息【提示我們錄入的】),后續需要發送給CA生成簽名證書,生成請求文件過程如下:

OpenSSL> req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:hc
Organizational Unit Name (eg, section) []:bj
Common Name (eg, your name or your server's hostname) []:dnogdashuaige
Email Address []:3454@qq.comPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:111111
An optional company name []:dahuyou

接著我們就可以將server.csr交給CA機構生成簽名證書了,但是真的生成是要錢的,所以我們這里來模擬。
我們知道CA生成簽名也是通過自己的私鑰來進行的,所以先來模擬生成私鑰等信息:

OpenSSL> genrsa -des3 -out ca.key 1024  
Generating RSA private key, 1024 bit long modulus
.......++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

此時還不能簽名,還需要通過私鑰導出用來給其他公鑰生成簽名的根證書,如下:

OpenSSL> req -new -x509 -key ca.key -out ca.crt -days 365
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:hc
Organizational Unit Name (eg, section) []:bj
Common Name (eg, your name or your server's hostname) []:dahuyou
Email Address []:222@ff.com

這樣,一個冒牌的CA就有了,可以使用ca.crt來簽名生成證書了。
好,接著來生成證書啦:

OpenSSL> x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365
Signature ok
subject=/C=CN/ST=BJ/L=beijing/O=hc/OU=bj/CN=dnogdashuaige/emailAddress=3454@qq.com
Getting CA Private Key
Enter pass phrase for ca.key:

這里生成的server.crt就是在https協議交互過程中服務端給客戶端的證書了。

寫在后面

參考文章列表

openssl生成自簽名證書(完整版)。

分布式之拜占庭問題。

圖文詳解HTTPS協議通信全過程,結合抓包實戰分析,帶你一次看透HTTPS!零基礎入門到精通,收藏這一篇就夠了。

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

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

相關文章

word運行時錯誤‘53’,文件未找到:MathPage.WLL,更改加載項路徑完美解決

最簡單的方法解決!!!安裝Mathtype之后粘貼顯示:運行時錯誤‘53’,文件未找到:MathPage.WLLwin11安裝mathtype后會有這個錯誤,這是由于word中加載項加載mathtype路徑出錯導致的,這時候…

React實現列表拖拽排序

本文主要介紹一下React實現列表拖拽排序方法,具體樣式如下圖首先,簡單展示一下組件的數據結構 const CodeSetting props > {const {$t, // 國際化翻譯函數vm, // 視圖模型數據vm: {CodeSet: { Enable [], …

將 MySQL 表數據導出為 CSV 文件

目錄 一、實現思路 二、核心代碼 1. 數據庫連接部分 2. 數據導出核心邏輯 3. CSV文件寫入 三、完整代碼實現 五、輸出結果 一、實現思路 建立數據庫連接 查詢目標表的數據總量和具體數據 獲取表的列名作為CSV文件的表頭 將查詢結果轉換為二維數組格式 使用Hutool工具…

一文讀懂RAG:從生活場景到核心邏輯,AI“查資料答題”原來這么簡單

一文讀懂RAG:從生活場景到核心邏輯,AI“查資料答題”原來這么簡單 要理解 RAG(Retrieval-Augmented Generation,檢索增強生成),不需要先背復雜公式,我們可以從一個生活場景切入——它本質是讓AI…

git將當前分支推送到遠端指定分支

在 Git 中&#xff0c;將當前本地分支推送到遠程倉庫的指定分支&#xff0c;可以使用 git push 命令&#xff0c;并指定本地分支和遠程分支的映射關系。 基本語法 git push <遠程名稱> <本地分支名>:<遠程分支名><遠程名稱>&#xff1a;通常是 origin&…

【Linux】線程封裝

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、為什么需要封裝線程庫&#xff1f; pthread的痛點&#xff1a; 封裝帶來的好處&#xff1a; 二、線程封裝核心代碼解析 1. 頭文件定義&#xff08;Thread.hpp&a…

智慧交通管理信號燈通信4G工業路由器應用

在交通信號燈管理中傳統的有線通訊&#xff08;光纖、網線&#xff09;存在部署成本高、偏遠區域覆蓋難、故障維修慢等問題&#xff0c;而4G工業路由器憑借無線化、高穩定、強適配的特性&#xff0c;成為信號燈與管控平臺間的數據傳輸核心&#xff0c;適配多場景需求。智慧交通…

《Python Flask 實戰:構建一個可交互的 Web 應用,從用戶輸入到智能響應》

《Python Flask 實戰:構建一個可交互的 Web 應用,從用戶輸入到智能響應》 一、引言:從“Hello, World!”到“你好,用戶” 在 Web 應用的世界里,最打動人心的功能往往不是炫酷的界面,而是人與系統之間的真實互動。一個簡單的輸入框,一句個性化的回應,往往能讓用戶感受…

開發效率翻倍:資深DBA都在用的MySQL客戶端利器

MySQL 連接工具&#xff08;也稱為客戶端或圖形化界面工具&#xff0c;GUI Tools&#xff09;是數據庫開發、管理和運維中不可或缺的利器。它們比命令行更直觀&#xff0c;能極大提高工作效率。以下是一份主流的 MySQL 連接工具清單&#xff0c;并附上了它們的優缺點和適用場景…

基于Docker和Kubernetes的CI/CD流水線架構設計與優化實踐

基于Docker和Kubernetes的CI/CD流水線架構設計與優化實踐 本文分享了在生產環境中基于Docker和Kubernetes構建高效可靠的CI/CD流水線的實戰經驗&#xff0c;包括業務場景、技術選型、詳細方案、踩坑與解決方案&#xff0c;以及最終的總結與最佳實踐&#xff0c;幫助后端開發者快…

Trae x 圖片素描MCP一鍵將普通圖片轉換為多風格素描效果

目錄前言一、核心工具與優勢解析二、操作步驟&#xff1a;從安裝到生成素描效果第一步&#xff1a;獲取MCP配置代碼第二步&#xff1a;下載第三步&#xff1a;在 Trae 中導入 MCP 配置并建立連接第四步&#xff1a;核心功能調用三、三大素描風格差異化應用四.總結前言 在設計創…

2 XSS

XSS的原理 XSS&#xff08;跨站腳本攻擊&#xff09;原理 1. 核心機制 XSS攻擊的本質是惡意腳本在用戶瀏覽器中執行。攻擊者通過向網頁注入惡意代碼&#xff0c;當其他用戶訪問該頁面時&#xff0c;瀏覽器會執行這些代碼&#xff08;沒有對用戶的輸入進行過濾導致用戶輸入的…

GitHub每日最火火火項目(9.3)

1. pedroslopez / whatsapp-web.js 項目名稱&#xff1a;whatsapp-web.js項目介紹&#xff1a;基于 JavaScript 開發&#xff0c;是一個用于 Node.js 的 WhatsApp 客戶端庫&#xff0c;通過 WhatsApp Web 瀏覽器應用進行連接&#xff08;A WhatsApp client library for NodeJS …

Ansible變量

Ansible變量定義變量規則&#xff1a;由字母/數字/下劃線組成&#xff0c;變量需要以字母開頭&#xff0c;ansible內置的關鍵字不能作為變量。ansible中&#xff0c;可以將變量簡化為三個范圍&#xff1a;Global范圍&#xff08;高&#xff09;&#xff1a;從命令行和ansible配…

Elasticsearch 核心特性與應用指南

最近在準備面試&#xff0c;正把平時積累的筆記、項目中遇到的問題與解決方案、對核心原理的理解&#xff0c;以及高頻業務場景的應對策略系統梳理一遍&#xff0c;既能加深記憶&#xff0c;也能讓知識體系更扎實&#xff0c;供大家參考&#xff0c;歡迎討論。一、核心優勢 Ela…

力扣115:不同的子序列

力扣115:不同的子序列題目思路代碼題目 給你兩個字符串 s 和 t &#xff0c;統計并返回在 s 的 子序列 中 t 出現的個數。 測試用例保證結果在 32 位有符號整數范圍內。 思路 首先我們來考慮特殊情況&#xff0c;當s串的長度小于t串時s串肯定就沒有t串了。其他情況我們就需…

2004-2023年各省生活垃圾無害化處理率數據(無缺失)

2004-2023年各省生活垃圾無害化處理率數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;2004-2023年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;生活垃圾無害化處理率 4、范圍&#xff1a;30省 5、指標解釋&#xff1a;生活垃圾無害化處理率指報…

【Python練習題】Python小白必練100題答案-第21-40題

練習題直達鏈接Python小白必練100題答案-第1-20題點我直達Python小白必練100題答案-第21-40題點我直達Python小白必練100題答案-第41-60題點我直達Python小白必練100題答案-第61-80題點我直達Python小白必練100題答案-第81-97題點我直達目錄專欄導讀循環結構 字符串操作第三部…

添加?件--場景?

添加?件–場景? 學習到這?&#xff0c;我們已經清楚了如何向倉庫中添加?件&#xff0c;并且對于?作區、暫存區、版本庫也有了?定的認識。那么我們再展??種添加?件的場景&#xff0c;能加深對?作區、暫存區、版本庫的理解&#xff0c;?例如下&#xff1a; roothcss-e…

華為網路設備學習-31(BGP協議 六)

BGP路由屬性的幾種常見使用方法&#xff1a; 29章是 BGP路由匯總 與 as-path-filter&#xff08;正則表達式&#xff09; 30章是 Community 的使用方法 本章是 ip前綴列表ip-prefix 、 路由過濾 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前綴列表&#xf…