女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡單介紹TLS1.2握手和協商過程

RTThread物聯網操作系統 ? 來源:lp ? 2019-04-10 15:22 ? 次閱讀

前言

隨著物聯網的發展,連接到互聯網的設備數量呈指數增長,物聯網信息安全越來越重要。

因此,TLS 逐漸成為物聯網通訊的標配。但是 TLS 是加密傳輸,這給調試增加了一定的難度。

筆者最近工作中一直用到 HTTPS,但是苦于 wireshark 只能抓取 HTTP 的明文數據包,無法抓取 HTTPS 的數據包,于是就有了這篇文章,在 RT-Thread 系統上,使用 wireshark 抓取 HTTPS 數據包.

簡單介紹TLS1.2握手和協商過程

client hello

客戶端向服務器發送 tls 版本,加密方式,客戶端隨機數等。

server hello

服務器端返回協商信息的結果,包括使用的 tls 版本,使用哪一種加密方式(cipher suite), 服務器的隨機數(random_s)。

證書校驗

客戶端驗證證書的合法性,如果驗證通過才會進行后續通訊

client key exchange

客戶端發送協商密鑰發送給服務端

server change cipher spec

服務器通知客戶端以后使用此協商密鑰進行加密

hangshake message finish

客戶端接收服務器發送的握手消息,驗證通過后,握手完成。

此后的通訊都采用協商密鑰和加密算法通訊。

設備端解密https數據包

查閱文檔得知,wireshark 支持將 tls 會話中使用的密鑰保存到外部文件中,供 wireshark 使用。

流程圖

在沒有抓包路由器的情況下,使用方案A, 電腦創建 wifi 熱點,設備端連接電腦熱點,并發起 https 請求,服務器接收到請求,向設備端發出響應,設備端根據響應的內容,計算出密鑰, 并將設備端隨機數和密鑰通過 udp 發送到 pc,保存到 sslkey.log 文件,wireshark 根據設備端隨機數和密鑰即可將 tls 數據包解密。

配置wireshark

新建 sslkey.log 文件,并配置為 windows 系統變量。

配置 wireshark編輯->首選項->protocols->SSL(version 2.4.9),更高版本的 wireshark 操作步驟為:編輯->首選項->protocols->TLS

配置好之后重啟 wireshark

按照下面的格式,向 sslkey.log 寫入客戶端隨機數和密鑰, 即可使 wireshark 解密 tls 數據包.

1CLIENT_RANDOM5a497axx3756f69b4axxx2CLIENT_RANDOM5dfb96xxb07a9da164xxx3CLIENT_RANDOM5a497axx12e14567b9xxx4CLIENT_RANDOM55c00xxxb07a9da164xxx5CLIENT_RANDOM5a497xxxb03ca0d5fcxxx

數據的含義如下:

CLIENT_RANDOM: 固定標簽(支持 SSL 3.0, TLS 1.0, 1.1, 1.2)

第二個參數:客戶端隨機數(random_c)32個字節,編碼為64個十六進制字符

第三個參數: 48字節的協商密鑰,編碼為96個十六進制字符

接下來只要找到設備上的客戶端隨機數和密鑰,保存到 syskey.log,即可通過 wireshark 解密 tls 數據包。

下面函數,保存了客戶端隨機數和密鑰信息。

ssl_tls.c

1intmbedtls_ssl_derive_keys(mbedtls_ssl_context*ssl) 2{ 3... 4 5MBEDTLS_SSL_DEBUG_MSG(3,("ciphersuite=%s", 6mbedtls_ssl_get_ciphersuite_name(session->ciphersuite))); 7MBEDTLS_SSL_DEBUG_BUF(3,"mastersecret",,48); 8MBEDTLS_SSL_DEBUG_BUF(4,"randombytes",handshake->randbytes,64); 9MBEDTLS_SSL_DEBUG_BUF(4,"keyblock",keyblk,256);10...11}

其中session->master保存的是密鑰,handshake->randbytes保存的是客戶端和服務器的隨機數。也就是說,將這兩個參數保存到 sslkey.log 文件中,那么 wireshark 就能解密設備上的https數據包。

編寫 udp 客戶端,將客戶端隨機數和密鑰發送到 windows,windows 編寫 udp server python 腳本,用于接收數據,并將數據寫入 sslkey.log 文件

1#include 2#include 3 4#include 5#include"netdb.h" 6 7staticintport=5000; 8 9voidudpcli_send(char*ip,char*random_c,intrandom_len,char*master,intmaster_len)10{11intsock;12structhostent*host;13structsockaddr_inserver_addr;14charrandom_ptr[100]={0};15charmaster_ptr[100]={0};16inti=0;1718if(random_c==RT_NULL||master==RT_NULL)19{20rt_kprintf("random_cormasterisnull\n");21return;22}2324host=(structhostent*)gethostbyname(ip);25if(host==RT_NULL)26{27rt_kprintf("Gethostbynamefailed!\n");28return;29}3031//randomserver_random:32bit+client_random:32bit32for(i=0;ih_addr);5354rt_memset(&(server_addr.sin_zero),0,sizeof(server_addr.sin_zero));5556//sendto(sock,send_data,rt_strlen(send_data),0,(structsockaddr*)&server_addr,sizeof(structsockaddr));57sendto(sock,random_ptr,64,0,(structsockaddr*)&server_addr,sizeof(structsockaddr));58sendto(sock,master_ptr,96,0,(structsockaddr*)&server_addr,sizeof(structsockaddr));5960if(sock>=0)61{62closesocket(sock);63sock=-1;64}65}

udpserver.py

1importsocket 2 3BUFSIZ=1024 4ip_port=('0.0.0.0',5000) 5file=r'd:\work\tmp\sslkey.log' 6 7server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 8server.bind(ip_port) 910whileTrue:11random_c,client_addr=server.recvfrom(BUFSIZ)12master,client_addr=server.recvfrom(BUFSIZ)13print("openfile"+""+file)14write_data='CLIENT_RANDOM'+str(random_c,encoding='utf-8')+''+str(master,encoding='utf-8')15print(write_data)1617withopen(file,'a')asf:18f.write(write_data)19print("closefile"+""+file)

需要注意的是,設備使用上述方法解密 https 的數據包,加密算法目前只能是 RSA,所以還需要強制客戶端發送的加密方式(cipher suites)只能是 RSA。

修改packages\mbedtls-latest\ports\inc\tls_config.h,注釋掉如下宏定義:

1//#defineMBEDTLS_KEY_EXCHANGE_PSK_ENABLED2//#defineMBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED3//#defineMBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED4//#defineMBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED5//#defineMBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED6//#defineMBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED7//#defineMBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED8//#defineMBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED9//#defineMBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED

這樣就可以確保客戶端和服務器只使用 RSA 的加密方式進行通信, 但是部分服務器不支持 RSA 的方式,握手過程會失敗。

將udpcli_send函數添加到mbedtls_ssl_derive_keys函數中,如下所示

1MBEDTLS_SSL_DEBUG_MSG(3,("ciphersuite=%s", 2mbedtls_ssl_get_ciphersuite_name(session->ciphersuite))); 3MBEDTLS_SSL_DEBUG_BUF(3,"mastersecret",session->master,48); 4MBEDTLS_SSL_DEBUG_BUF(4,"randombytes",handshake->randbytes,64); 5MBEDTLS_SSL_DEBUG_BUF(4,"keyblock",keyblk,256); 6 7//replaceyouripaddress 8udpcli_send("192.168.123.206",handshake->randbytes,32,session->master,48); 910mbedtls_zeroize(handshake->randbytes,sizeof(handshake->randbytes));

windows 運行 python 腳本(注意修改sslkey.log的文件路徑)

1pythonudpserver.py

設備聯網成功后,在 MSH 終端輸入

1\|/ 2-RT-ThreadOperatingSystem 3/|\4.0.1buildApr22019 42006-2019Copyrightbyrt-threadteam 5lwIP-2.0.2initialized! 6[I/SAL_SOC]SocketAbstractionLayerinitializesuccess. 7 8........... 9msh/mnt/sdcard>10msh/mnt/sdcard>11msh/mnt/sdcard>12msh/mnt/sdcard>wgethttps://www.rt-thread.com/service/rt-thread.txt1.txt

wireshark抓包

加密的數據包

解密的數據包

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 物聯網
    +關注

    關注

    2927

    文章

    45887

    瀏覽量

    388064
  • 路由器
    +關注

    關注

    22

    文章

    3814

    瀏覽量

    115995
  • 數據包
    +關注

    關注

    0

    文章

    269

    瀏覽量

    24878

原文標題:基于RT-Thread 使用 wireshark 抓取 HTTPS 數據包

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    請問ESP8266的SDK支持TLS1.2版本嗎?

    請問ESP8266的SDK支持TLS1.2版本嗎?
    發表于 07-11 07:21

    TLS-V1.2 HTTPS請求吞吐量非常差

    測試與FRIERTOS + LWIP建立在43438。與TLS-V1.1相比,TLS-V1.2 HTTPS請求吞吐量非常差。TLSV1.1每分鐘發送的HTTPS請求數是TLSV1.2的14倍。另外
    發表于 10-23 15:14

    不受信任的證書EAP-TLS錯誤5035

    在試圖使用EAP-TLS進行企業安全連接時,在TLS握手序列中,在服務器Hello完成之后,我們使用不可信證書EAP-TLS錯誤5035失敗。在不同的服務器上使用不同的證書,它工作得很
    發表于 10-29 11:35

    用2048位的密鑰大小與TLS SSL服務器通信?

    hello”消息沒有“Server Hello”返回。APache和板之間的密碼套件和協協商似乎很糟糕。有沒有機會用2048位的密鑰大小與TLS/SSL服務器通信?希望大家能幫忙!謝謝您。
    發表于 04-02 10:12

    深度還原TLS握手問題的排查思路和方法

    問題,說實話,我也是懵的,因為這個錯誤碼在過往的調試、開發、測試過程中并沒有見過。雖然之前也遇到過一些 TLS握手失敗的問題,一般可能就是CA證書沒有配好,或者還有一個 mbedtls配置項
    發表于 08-04 11:31

    請問SPC-5 Studio是否支持這些功能?

    1. TCP IP雙棧(Ipv4/Ipv6)2 TLS1.2
    發表于 01-09 08:30

    TCP三次握手過程描述

    本文檔主要描述TCP三次握手過程,一個完整的三次握手也就是 請求---應答---再次確認
    發表于 03-02 15:37 ?8次下載

    TLS1.3的正式運行版本,為互聯網安全筑起了新的長城

    目前網上廣泛使用的安全協議TLS1.2始于2008年,這些年來它為網民們遮風擋雨立下汗馬功勞,但是在滿世界黑客的明槍暗箭攻擊下也是滿目滄桑。為了修補漏洞,執行TLS1.2協議的軟件打滿了補丁,俗話說:“新三年舊三年,縫縫補補又三年。” 九年多了,
    的頭像 發表于 03-30 09:22 ?4440次閱讀
    <b class='flag-5'>TLS</b>1.3的正式運行版本,為互聯網安全筑起了新的長城

    科普:簡化SSL/TLS握手過程

    伴隨所有握手,SSL / TLS握手是一切開始的地方。SSL / TLS握手涉及一系列步驟,通過該步驟,雙方(客戶端和服務器)彼此進行驗證,
    的頭像 發表于 06-27 17:36 ?2963次閱讀

    使用TLS 1.3的優勢有哪些

      您會注意到的一個顯著差異是執行完全握手時往返次數減少。較舊版本的 TLS 協議要求在客戶端發送應用程序數據之前進行兩次完整的往返。使用 TLS v1.3,只需要一次往返!此外,服務器可以發送應用程序數據以響應客戶端的第一個
    的頭像 發表于 10-20 17:05 ?1703次閱讀

    HTTPS協議是什么?為什么安全?

    HTTPS簡單理解成HTTP over SSL/TLS。客戶端和服務端在使用HTTPS傳輸業務數據前,首先由SSL/TLS協議在兩端之間建立安全信道(這個過程稱作
    的頭像 發表于 01-08 14:36 ?2694次閱讀

    基于TLS DoIP測試開發實踐

    作者|寧國路小龍蝦小編|吃不飽車載以太網系列文章“當DoIP遇上TLS介紹了新版ISO13400-2規范變化點、TLS簡介以及CANoeTLSdemo工程的數據流,其中TLSDoIP數據流分為4
    的頭像 發表于 05-31 09:47 ?869次閱讀
    基于<b class='flag-5'>TLS</b> DoIP測試開發實踐

    微軟宣布Azure賬戶取消TLS1.0和1.1支持

    此舉涉及到所有現有的及新創建的Azure賬戶。為確保業務不受影響,IT之家強烈推薦各用戶盡早在2024年10月31日前完成TLS1.2的升級,并刪除對TLS1.0和1.1的依賴性。實踐表明,TLS1.0和1.1無法充分保護數據安
    的頭像 發表于 01-11 11:47 ?829次閱讀

    谷歌Chrome瀏覽器抗量子加密算法被指破壞TLS握手,導致部分網站無法被訪問

    谷歌自去年8月起便開始測試后量子安全TLS密鑰封裝機制,通過采用TLS 1.3及QUIC連接的Kyber768抗量子密鑰協商算法,以提升ChromeTLS流量的安全性。
    的頭像 發表于 04-30 14:22 ?898次閱讀

    socket 加密通信的實現方式

    握手過程協商加密算法、生成會話密鑰。 數據傳輸: 使用協商的加密算法和會話密鑰對數據進行加密和解密。 結束握手: 通信結
    的頭像 發表于 11-12 14:18 ?1258次閱讀