【開發經驗】結合實際問題解決詳述HTTPS通信過程

最近的開發調試過程中涉及到了HTTPS發送與接收,遇到實際問題才發現對這部分尚屬于一知半解。結合實際問題的解決過程來詳細整理以下HTTPS通信過程。

需要調試的功能為BMC作為客戶端向搭建好的Web服務器發送HTTPS請求,Web服務器負責接收處理發送過來的HTTPS請求。BMC的IP為100.6.100.224,Web服務器的IP為100.2.74.71。在BMC向Web服務器發送一條請求HTTPS請求,服務器成功接收到請求,返回成功信息。通過WireShark抓包這一過程,如下圖所示:

OpenBMC發送HTTPS請求過程
從中可以看出,HTTPS通信過程分為兩部分,首先進行TCP握手,然后進行TLS握手并發送信息。

1.1 TCP三次握手

前三個Wireshark數據包展示的就是TCP三次握手的過程,如下圖所示:

TCP三次握手過程

1.1.1 第一次握手

第一次握手,客戶端向服務器端發送SYN標志置位的報文,同時生成自己的隨機初始序列號seq。數據包如下圖所示。(這里客戶端使用的seq直接使用了0,不太清楚為什么不是隨機數)

第一次握手

1.1.2 第二次握手

第二次握手,服務器端向客戶端發送SYN與ACK置位的報文,生成服務器端的隨機初始序列號seq(這里服務器端的seq也直接使用了0),可以看到回復的報文中Ack的值為1(客戶端seq+1),表示已收到客戶端的SYN。

第二次握手

1.1.3 第三次握手

第三次握手,客戶端向服務器端發送ACK置位的報文,報文中Ack的值為1(服務器端seq+1),服務器端收到后TCP連接就成功建立了。

第三次握手

1.2 TLS握手

TCP連接建立后,開始進入TLS握手階段。TLS握手階段數據包如下所示:

TLS握手過程

1.2.1 Client Hello

首先客戶端向服務器端發送初始消息,內容包括支持的 TLS 版本,客戶端隨機數(Client Random,用于后續密鑰生成)與支持的加密套件列表等,如下圖所示。

Client Hello

1.2.2 Server Hello

服務器端會回復這一消息,如下圖所示,回復的消息中包括選定的 TLS 版本(與客戶端支持的版本一致),服務器隨機數(Server Random,用于后續密鑰生成)與選擇的加密套件(從客戶端發送的列表中選擇),從圖中可以看出服務器端選擇了TLS v1.2,加密套件為TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Server Hello

1.2.3 Certificate,Serverkey Exchange,Server Hello Done

下圖的數據包中包括了Certificat,Serverkey Exchange與Server Hello Done三部分信息。服務器端發送其數字證書,包含服務器的公鑰、證書頒發機構(CA)的簽名以及域名等信息,供客戶端驗證身份,客戶端則會驗證證書是否由可信 CA 頒發、證書是否過期或被吊銷以及證書中的域名與實際訪問的域名是否一致。如下圖所示,可以看到數據包中包含了證書信息

Certificate

視選擇的加密套件需要,服務器還會發送密鑰交換參數(如 ECDHE 的公鑰參數)以及用服務器私鑰簽名的數據(確保參數未被篡改):

ServerKey Exchange
最后服務器端還通知客戶端,協商部分結束:
Server Hello Done

1.2.4 Client Key Exchange,Change Cipher Spec,Encrypted HandShake Message

客戶端會生成一個預主密鑰(pre-master secret),預主密鑰用服務器的公鑰加密后會被發送給服務器端。服務器會使用其私鑰解密這個預主密鑰,從而獲得客戶端的預主密鑰。雙方都擁有預主密鑰之后,會使用之前的兩個隨機數(Client Hello中的Random與Server Hello中的Random)生成主密鑰。到這里還沒結束,TLS協議會使用PRF(偽隨機函數)來從主密鑰派生出一個用于加密的會話密鑰和一個用于消息完整性和認證的MAC密鑰。所有的密鑰被正確生成和派生之后,客戶端和服務器會通過交換完成的消息來確認彼此的身份,并確保所有的握手參數都是一致的,到此握手階段才算完成。

客戶端Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message

服務器端 Change Cipher Spec,Encrypted Handshake Message

1.2.5 Application Data, FIN

完成握手后,客戶端就開始向服務器端發送數據。從數據包中可以看到,正常發送完畢之后,服務器端發送FIN標志置位的數據包斷開連接,連接最后被斷開了。

發送數據并斷開連接

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

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

相關文章

【Android】Android Activity 橫屏設置詳解及常見異常問題解決方法匯總

在 Android 開發中,我們經常需要控制 Activity 的屏幕方向,例如視頻播放、游戲、VR/AR 應用等場景通常希望默認橫屏顯示。本文將講解如何通過 Manifest 配置 和 Java/Kotlin 代碼 設置橫屏顯示,并分析常見設置無效的原因與解決方法。 一、通過…

文件相關:echo重定向管道命令擴展詳解

一、echo 文字內容 echo 會在終端中顯示參數指定的文字,通常會和 重定向 聯合使用 二、重定向 > 和 >> Linux 允許將命令執行結果 重定向到一個 文件將本應顯示在終端上的內容 輸出 / 追加 到指定文件中 其中: >表示輸出,會覆…

Python 中使用單例模式

有這么一種場景,Web服務中有一個全局資源池,在需要使用的地方就自然而言引用該全局資源池即可,此時可以將該資源池以單例模式實現。隨后,需要為某一特殊業務場景專門準備一個全局資源池,于是額外復制一份代碼新建了一個…

websocket深入-webflux+websocket

文章目錄 背景版本約定配置文件代碼使用webflux使用websocket配置文件handler基類實現類注冊路由 背景 基于更復雜的情況和更高的開發要求,我們可能會遇到必須同時要使用webflux和websocket的情況。 版本約定 JDK21Springboot 3.2.0Fastjson2lombok 配置文件 &…

致遠OA —— 表單數據獲取(前端)

文章目錄 :apple: 業務需求描述 🍎 業務需求描述 測試案例: https://pan.quark.cn/s/3f58972f0a27 官網地址: 需求描述: 點擊獲取數據接口,調用后臺,將從后臺查詢到的數據回寫到表單的內容中。 如下…

51c嵌入式~繼電器~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/13775821 一、繼電器應用細節 繼電器的應用,相信大家都知道,在電路中只要給它供電、斷電也就可以工作了。本文討論它的應用細節。 現在流行的接法 圖中,繼電器的線圈經過Q1作為開關&am…

前端性能優化核彈級方案:CSS分層渲染+Wasm,首屏提速300%!

前端性能優化核彈級方案:CSS分層渲染Wasm實現首屏提速300%的終極指南 在當今Web應用日益復雜的背景下,性能優化已成為前端開發的核心競爭力。本文將深入剖析兩種革命性的前端性能優化技術——CSS分層渲染與WebAssembly(Wasm)的協同應用,揭示…

初識Redis · 簡單理解Redis

目錄 前言: 分布式系統 開源節流 認識Redis 負載均衡 緩存 微服務 前言: 本文只是作為Redis的一篇雜談,簡單理解一下Redis為什么要存在,以及它能做到和它不能做到的事兒,簡單提及一下它對應的優勢有什么&#…

網絡通訊協議UDP轉發TCP工具_UdpToTcpRelay_雙向版

UDP/TCP網絡轉發器程序說明書 1. 程序概述 本程序是一個高性能網絡數據轉發工具,支持UDP和TCP協議之間的雙向數據轉發,并具備以下核心功能: 協議轉換:實現UDP?TCP協議轉換數據轉換:支持十六進制/ASCII格式的數據轉…

MCP 服務搭建與配置學習資源部分匯總

MCP 服務搭建與配置學習資源匯總 目錄 圖文教程GitHub 示例項目視頻課程不同開發語言實現案例 圖文教程 Cherry Studio 配置 MCP 服務教程 – 介紹如何在 Cherry Studio 客戶端中配置 MCP 服務器,讓 AI 模型能夠自主調用本地/網絡工具來完成任務,提升…

Selenium中`driver.get(htmlfile)`方法可能出現的超時問題

針對Selenium中driver.get(htmlfile)方法可能出現的超時問題,以下是幾種改進方案及具體實現方法: 1. 設置頁面加載超時時間 通過set_page_load_timeout()方法直接控制頁面加載的最大等待時間。若超時,會拋出TimeoutException異常&#xff0c…

20分鐘了解 MMAction2 框架設計

步驟3:構建一個識別器 # 修改此處 predictions[0].pred_score -> predictions[0].pred_scores.item print(Scores of Sample[0], predictions[0].pred_scores.item)步驟4:構建一個評估指標 # 修改此處 data_sample[pred_score].cpu().numpy() ->…

單軌小車懸掛輸送機安全規程

導語 大家好,我是社長,老K。專注分享智能制造和智能倉儲物流等內容。歡迎大家使用我們的倉儲物流技術AI智能體。 新書《智能物流系統構成與技術實踐》 新書《智能倉儲項目出海-英語手冊,必備!》 完整版文件和更多學習資料&#xf…

C++之多態

文章目錄 一、多態的概念 多態的定義與類型 二、多態的實現 三、虛函數 虛函數的概念 虛函數的重寫/覆蓋 協變 析構函數的重寫/覆蓋 override,final關鍵字 override final 純虛函數與抽象類 三個概念辨析 四、多態實現的原理 虛函數表指針 動態綁定與靜態綁定 …

深入理解 HTML5 Audio:網頁音頻播放的新時代

在網頁開發領域,音頻的嵌入和播放一直是一個重要且不斷演進的話題。HTML5 的出現,為網頁音頻播放帶來了標準化的解決方案,極大地改善了開發者和用戶的體驗。 一、HTML5 之前的音頻播放狀況 在 HTML5 誕生之前,互聯網上缺乏統一的網頁音頻播放標準。當時,大多數音頻播放依…

重載和重寫的區別

重載 在同一個類中定義多個同名方法, 但參數列表不同(參數類型、參數個數或參數順序不同)返回值類型不同。 public class MathOperations {int add(int a, int b) {return a b;}double add(double a, double b) {return a b;} }重寫 子…

機器視覺+深度學習,讓電子零部件表面缺陷檢測效率大幅提升

在精密加工的3C電子行業中,一抹0.1毫米的油漬,一粒肉眼難辨的灰塵或將引發整機性能隱患。當制造業邁入微米級品質競爭時代,產品表面看似微不足道的臟污缺陷,正成為制約企業高質量發展的隱形枷鎖。分布無規律的污漬斑點、形態各異的…

Dart逆向之函數調用

我們從Blutter恢復的部分IL中可以看到Dart調用函數的邏輯 // 0x180490: r16 <int> // 0x180490: ldr x16, [PP, #0x8a0] ; [pp0x8a0] TypeArguments: <int> // 0x180494: r30 Instance_MethodChannel // 0x180494: ldr lr, [P…

如何白嫖Grok3 API? 如何使用Grok3 API調用實例?怎么使用Grok3模型?

前段時間&#xff0c;Grok3&#xff08;想要體驗Grok3的童鞋可以參考本文&#xff1a;Grok 上線角色扮演功能&#xff0c;教你課后作業手到擒來&#xff0c;Grok3使用次數限制&#xff1f;如何使用Grok3? Grok3國內支付手段如何訂閱升級Premium - AI is all your need!&#x…

《超短心法》速讀筆記

文章目錄 書籍信息概覽主線行業篇戰法一 人氣漲停戰法戰法二 四維主線戰法 主線龍頭篇戰法三 龍頭起爆戰法戰法四 六合強莊控盤戰法戰法五 籌碼戰法之七星連珠 趨勢牛股篇戰法六 趨勢擒龍之暴漲形態戰法七 趨勢破位起爆戰法戰法八 強中選強多頭戰法 漲停晉級篇戰法九 強勢漲停狙…