使用wireshark抓包,驗證客戶端和服務端SSL通信時指定的算法套件

前情提要

  • 使用Clion和gmssl動態庫實現服務器server和客戶端client之間的SSL通信,測試指定密碼套件_MY CUP OF TEA的博客-CSDN博客
  • 在基于 Ubuntu 的 Linux 發行版上安裝 Wireshark_MY CUP OF TEA的博客-CSDN博客
  • 本地搭建server和客戶端使用端口進行數據通信,使用Wireshark抓取127.0.0.1環回地址并分析通信數據_MY CUP OF TEA的博客-CSDN博客_wireshark抓127.0.0.1
  • 使用wireshark抓包,本地環回測試通信數據已經通過SM4國密算法加密_MY CUP OF TEA的博客-CSDN博客_sm4 在線測試

參考鏈接

  • 用wireshark抓包分析TLS協議_GEEK_BD_bro的博客-CSDN博客_wireshark 過濾tls

啟動wireshark

  • 雖然配置wireshark的時候,選擇所有用戶均可進行抓包,但是在真正使用的時候,普通用戶還是會存在問題,通過鼠標點擊圖標的方式啟動wireshark,默認是當前用戶,不是root用戶,不光界面不一樣,且不允許抓包
  • 開啟終端,使用命令 sudo wireshark 開啟wireshark軟件,進行抓包
  • 參考上述鏈接里面的server和客戶端的代碼,指定ip地址為127.0.0.1,端口為7838,因此本文采用本地環回的方式進行數據包的抓取和分析

操作流程

  • wireshark 選擇本地環回
  • 在過濾欄設置過濾條件進行數據包列表過濾輸入 tls,表示只顯示TLS協議的數據包

  • 開啟服務端
  • 開啟客戶端

補充知識

  • SSL/TLS是保護計算機網絡通訊安全的一類加密協議,它們在傳輸層上給原先非安全的應用層協議提供加密保護,如非安全的HTTP協議即可被SSL/TLS保護形成安全的HTTPS協議。
  • SSL、TLS協議其實是有所差異的,TLS協議是繼承了SSL協議并寫入RFC,標準化后的產物。因此,通常使用SSL來指代SSL協議和TLS協議。
  • SSL (Secure Socket Layer)安全套接字層協議
    • SSL通過互相認證、使用數字簽名確保完整性、使用加密確保私密性,以實現客戶端和服務器之間的安全通訊。
    • 分為SSL記錄協議和SSL握手協議。
  • TLS(Transport Layer Security)傳輸層安全協議
    • 用于兩個應用程序之間提供保密性和數據完整性。
    • 分為TLS記錄協議和TLS握手協議。
  • 區別:
    • SSL是Netscape開發的專門用戶保護Web通訊的,目前版本為3.0。
    • TLS 1.0是IETF(工程任務組)制定的一種新的協議,它建立在SSL 3.0協議規范之上,是SSL 3.0的后續版本。兩者差別極小,可以理解為SSL 3.1,它是寫入了RFC的

在這里插入圖片描述

?服務端和客戶端通信流程

在這里插入圖片描述

?藍色表示客戶端-->服務端綠色表示服務端 --> 客戶端

  • Client Hello:客戶端向服務端打招呼;攜帶支持的協議、支持的安全套件供服務端選擇;
  • Server Hello:服務端回應客戶客戶端的招呼信息;結合客戶端的信息,選擇合適的加密套件;
  • Certificate:服務端向客戶端發送自己的數字證書(此證書包含服務端的公鑰),以實現驗證身份;
  • Server Key Exchange:服務端向客戶端發送基于選擇的加密套件生成的公鑰(此公鑰為橢圓曲線的公鑰,用于協商出對稱加密的密鑰);
  • Server Hello Done:服務端向客戶端表示響應結束;
  • Client Key Exchange:客戶端向服務端發送自己生成的公鑰(此公鑰為橢圓曲線的公鑰,用于協商出對稱加密的密鑰);
  • Change Cipher Spec:變更密碼規范;告知服務端/客戶端,以后的通信都是基于AES加密的;
  • Encrypted Handshake Message:基于協商生成的密鑰,用AES加密驗證信息讓服務端/客戶端進行認證;如果對方可以解密,則雙方認證無誤開始通信;
  • New Session Ticket:是優化SSL連接的一種方法,此處不做特別說明
  • 注:Certificate Request:服務器如果需要驗證客戶端的身份,那么服務器會發一個“Certificate Request”給瀏覽器,而在很多實現中,服務器一般不需要驗證客戶端的身份

?協議包分析

Client Hello包

  • Random Bytes:客戶端產生的28字節隨機數,用于生成最終密鑰,后面的過程還會傳遞兩個隨機數,三個隨機數做為EC Diffie-Hellman算法的相關參數,運算出會話密鑰。先把這個隨機數稱為random_c.
  • Session ID:會話標識符:如果是一個新的連接,這個值為0
  • Cipher Suites:加密套件(客戶端共支持17個加密套件),服務器會從中選擇一個服務器也支持的加密套件
  • Compression Methods:客戶端支持的壓縮方法
  • Extension: ALPN:客戶端支持的應用層協議;未找到依據
  • Extension: signature_algorithms: 客戶端支持的簽名算

Cipher Suites:Unknown(0xe107)

  • 客戶端內部指定了gmssl支持的密碼學套件
  • 0xE1,0x07 - ECDHE-SM2-WITH-SMS4-GCM-SM3 ? ?TLSv1.2 ? ?Kx=ECDH ? ? Au=SM2 ? ?Enc=SMS4GCM(128) ? ? ? ? ? ?Mac=AEAD

        //指定密碼算法套件// gmssl ciphers -V 明確支持SSL_CTX_set_cipher_list(ctx,"ECDHE-SM2-WITH-SMS4-GCM-SM3");

?Server Hello, Certificate, Certificate Status, Server Key Exchange, Server Hello Done包

Server Hello段?

  • Random Bytes:服務器生成的隨機數random_s
  • Cipher Suites:服務器選擇的加密套件:0xe107
  • Compression Methods:服務器選擇的壓縮算法為NULL壓縮算法。(不支持任何壓縮算法),壓縮基本由應用層來完成。

?Certificate

  • Certificate: 服務器返回了兩個證書: 第一個是CA簽發的證書(Bing),本模擬實驗中,此處是指服務器證書;第二個是CA鏈的證書,本模擬實驗中,此處是指CA根證書。
  • 客戶端收到這個證書后,可以根據證書鏈來驗證證書的真偽,進而判斷服務器是真是假。服務器和客戶端的證書均是由根CA進行簽名認證的
  • 服務器證書中存放一個公鑰,用于加密后面生成的Premaster secret

Server Key Exchange段

  • ?受限于特定的密碼算法套件

Certificate Request

  • Certificate Request:服務器如果需要驗證客戶端的身份,那么服務器會發一個“Certificate Request”給瀏覽器,而在很多實現中,服務器一般不需要驗證客戶端的身份

Server Hello Done段

Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 包

Certificate

  • ?服務端開啟了對于客戶端的身份認證
  • 第一個是CA簽發的證書(Bing),本模擬實驗中,此處是指客戶端證書;第二個是CA鏈的證書,本模擬實驗中,此處是指CA根證書。
  • 服務器收到這個證書后,可以根據證書鏈來驗證證書的真偽,進而判斷客戶端是真是假。服務器和客戶端的證書均是由根CA進行簽名認證的

Client Key Exchange段

???????

?Certificate Verify

Change Cipher Spec段?

  • 變更密碼規范協議,它非常簡單,就是一條通知消息,告知對方以后的通信都是加密的;

?Encrypted Handshake Message

  • ?客戶端使用生成的對話密鑰,加密之前所有收發握手消息的Hash和MAC值,發送給服務器,服務器將相同的會話密鑰(使用相同方法生成)解密此消息,校驗其中的Hash和MAC值。
  • 注意:Change Cipher Spec和Encrypted Handshake Message不像Client Hello、Server Hello等是封裝在 Handshake Protocol層,而是同Handshake Protocol一樣,直接封裝在TLS Record Layer層。

Change Cipher Spec, Encrypted Handshake Message包

  • Change Cipher Spec:服務器發送Change Cipher Spec消息,通知客戶端此消息以后服務器會以加密方式發送數據。服務器使用會話密鑰加密之前所有收發握手消息的Hash和MAC值,發送給客戶端去校驗。
  • 若客戶端服務器都校驗成功,握手階段完成,雙方將按照SSL記錄協議的規范使用協商生成的會話密鑰加密發送數據。
  • 可以看到,之后服務器開始向客戶端發送加密消息Application Data。

?Application Data包

  • 客戶端開始向服務器發送加密數據

???????

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

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

相關文章

r語言隨機森林回歸預測_從零實現回歸隨機森林

一、前言回歸隨機森林作為一種機器學習和數據分析領域常用且有效的算法,對其原理和代碼實現過程的掌握是非常有必要的。為此,本文將著重介紹從零開始實現回歸隨機森林的過程,對于隨機森林和決策樹的相關理論原理將不做太深入的描述。本文的目…

openssl編程-基礎知識-回調函數

參考內容 OpenSSL編程 趙春平 回調函數 回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所指向的函數時,我們就說這是回調函數把一段可執行的代碼像參數傳遞…

hive插件 ranger_Apache Ranger及Hive權限控制

一、Ranger概述1.Ranger簡介Apache Ranger提供一個集中式安全管理框架, 并解決授權和審計。它可以對Hadoop生態的組件如HDFS、Yarn、Hive、Hbase等進行細粒度的數據訪問控制。通過操作Ranger控制臺,管理員可以輕松的通過配置策略來控制用戶訪問權限。本文章介紹Ranger與Hive集成…

openssl編程-基礎知識-OpenSSL簡介

參考鏈接 在ubuntu環境下執行openssl編譯和安裝_MY CUP OF TEA的博客-CSDN博客_openssl ubuntuOpenSSL編程 趙春平 OpenSSL 簡介 它提供的主要功能有:SSL協議實現(包括SSLv2、SSLv3和TLSv1)、大量軟算法(對稱/非對稱/摘要)、大數運算、非對稱算法密鑰生成、ASN.1編…

linux修改文件句柄數生效_linux系統層面調優和常見的面試題

linux系統層面調優和常見的面試題?mp.weixin.qq.com無論對Spark集群,還是Hadoop集群等大數據相關的集群進行調優,對linux系統層面的調優都是必不可少的,這里主要介紹3種常用的調優:1.linux文件句柄linux在整個系統層面和單個進程…

openssl編程-基礎知識-OpenSSL堆棧

堆棧介紹 堆棧是一種先進后出的數據結構openssl 大量采用堆棧來存放數據。它實現了一 個通用的堆棧,可以方便的存儲任意數據它實現了許多基本的堆棧操作,主要有:堆棧拷貝(sk_dup)、構建新堆棧(sk_new_null,sk_new&…

小米用戶畫像_企鵝智庫:高學歷用蘋果中老年用華為 男性用小米女性用OV

不同手機品牌都有著自己不同的定位人群,在國內市場目前幾大非常有名的手機品牌分別被三星、蘋果、華為、小米、OV占據,而這些手機品牌的主要購買人群到底是什么樣的呢?企鵝智庫近日發布了一份手機消費者的調研報告,并且根據消費者…

國密gmtls協議-雙證書體系的服務端和客戶端通信代碼

內容介紹 國密的雙證書體系,將證書按照使用目的的不同劃分為加密證書和簽名證書兩種,也就是兩對公私鑰,二者本質一致,均為SM2密鑰對,區別僅體現在用法國密CA體系中,加密密鑰對由CA產生,簽名密鑰…

jwt 私鑰_什么是 JSON Web Token(JWT)

有關本文檔的快速鏈接,請參考頁面提示。什么是 JSON Web Token(JWT)?JSON Web Token (JWT) 作為一個開放的標準 (RFC 7519) 定義了一種簡潔自包含的方法用于通信雙方之間以 JSON 對象的形式安全的傳遞信息。因為有數字簽名,所以這些通信的信息能夠被校驗…

server和client之間進行Socket通信,進行數據切片

參考鏈接 send函數和recv函數 – gudakos memo 注意事項 代碼很low&#xff0c;主要看封裝的Send函數所體現的切片思想即可 server代碼 //udp服務端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include …

天線下傾角示意圖_常用天線和無源器件技術參數匯總

原標題&#xff1a;常用天線和無源器件技術參數匯總一、天線原理天線的定義&#xff1a; 能夠有效地向空間某特定方向輻射電磁波或能夠有效的接收空間某特定方向來的電磁波的裝置。天線的功能&#xff1a; 能量轉換-導行波和自由空間波的轉換; 定向輻射(接收)-具有一定的方向性…

制作作品圖片_不懂人文后期制作流程?來,大師手把手教你

制作前1、處理一張照片思路決定步驟 想要了解學習的老師可以私聊小編fzhdyx222制作后2、2020年最新Camera Raw局部影調和色調的控制想要了解學習的老師可以私聊小編fzhdyx222制作前3、2020年最新Camera Raw基礎工具細節性運用想要了解學習的老師可以私聊小編fzhdyx222制作后4、…

xlsx文件打開亂碼_Excel 2016 雙擊無法打開xlsx文件怎么辦?

最近我重裝了系統(Win10Office2016)&#xff0c;然后發現了一個奇怪的bug&#xff1a;雙擊xlsx文件&#xff0c;只能打開Excel窗口&#xff0c;但是打不開這個文件&#xff0c;有時候再次雙擊就能打開了&#xff0c;但有時再次雙擊也不管用&#xff0c;需要在Excel的菜單中點“…

gmssl使用雙證書雙向認證的gmtl協議報錯crypto/sm2/sm2_sign.c 510: sm2_do_verifySSL3 alert write:fatal:decrypt error

報錯內容 crypto/sm2/sm2_sign.c 510: sm2_do_verify SSL3 alert write:fatal:decrypt error SSL_accept:error in error ERROR 140655864152064:error:1417B07B:SSL routines:tls_process_cert_verify:bad signature:ssl/statem/statem_srvr.c:2941: 相關內容 版本&#xf…

糾偏的意思_承壓能力和糾偏能力,決定成長的高度

承壓能力&#xff0c;包含抗壓能力、抵御能力&#xff0c;擔當能力&#xff0c;分解能力&#xff0c;消化能力&#xff0c;釋放能力&#xff0c;等一系列的精神要素&#xff0c;是一個人生存生活工作中一項重要的素質。有的人&#xff0c;承壓能力很強&#xff0c;無論經受什么…

《Java8實戰》筆記(15):面向對象和函數式編程的混合-Java 8和Scala的比較

面向對象和函數式編程的混合&#xff1a;Java 8和Scala的比較 Scala是一種混合了面向對象和函數式編程的語言。它常常被看作Java的一種替代語言&#xff0c;程序員們希望在運行于JVM上的靜態類型語言中使用函數式特性&#xff0c;同時又期望保持Java體驗的一致性。和Java比較起…

函數指針作為形參進行調用

代碼 兩個代碼均位于namespace作用域之內addOne將傳遞進來的形參進行加一&#xff0c;然后返回performance_test函數主要是想簡化函數調用&#xff0c;兩個形參&#xff0c;第一個表示循環的次數&#xff0c;第二個是帶參數的函數指針&#xff0c;函數內部初始化start和end兩個…

python中fetchall_Python連接MySQL并使用fetchall()方法過濾特殊字符

來一個簡單的例子&#xff0c;看Python如何操作數據庫&#xff0c;相比Java的JDBC來說&#xff0c;確實非常簡單&#xff0c;省去了很多復雜的重復工作&#xff0c;只關心數據的獲取與操作。準備工作需要有相應的環境和模塊&#xff1a;Ubuntu 14.04 64bitPython 2.7.6MySQLdb注…

《Java8實戰》筆記(16):結論以及Java的未來

結論以及Java的未來 回顧Java8的語言特性 行為參數化&#xff08;Lambda以及方法引用&#xff09; 流 CompletableFuture Optional 默認方法 Java的未來 集合 類型系統的改進 聲明位置變量 更多的類型推斷 模式匹配 更加豐富的泛型形式 具化泛型 泛型中特別為函…

解決吉大正源(身份認證網關|USBKey)和gmssl(server|client)使用gmtl協議交叉互通報錯tlsv1 alert decrypt error

報錯內容 SSL_connect:error in SSLv3/TLS write finished140057291788288:error:1409441B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:ssl/record/rec_layer_s3.c:1385:SSL alert number 51 報錯原因 gmssl庫生成 certificate verify 消息時&#xff0c;對自客…