iT邦幫忙

2022 iThome 鐵人賽

DAY 9
1
Modern Web

快還要更快,讀作 quick 的下一代傳輸層協定: QUIC系列 第 9

【Day 09】淺談 QUIC Handshake 流程 (三) - 設定 wireshark 來抓 QUIC 封包

  • 分享至 

  • xImage
  •  

前言

在前一天的文章中我們透過密碼學的角度,簡單講解了 QUIC 在 Handshake 時交換金鑰的流程,今天我們要以封包的角度探討在 Client 端與 Server 端連線時雙方的封包交換流程,我們會用 wireshark 來撈封包,並且觀察其行為。

首先先安裝 wireshark,筆者用的 ubuntu22.04 好像沒有內建,需要另外安裝

$ sudo apt install wireshark

設定 wireshark QUIC port

在執行前先開啟 wireshark 並做一點簡單的設定

$ sudo wireshark

因為等等的實驗是跑在 localhost,所以在首頁看到 Loopback: lo 後雙擊,我們要撈的封包會在 lo 底下出現

補充閱讀 127.0.0.1 之本機網路通信過程知多少 ?!

點進去之後我們需要先設定一下 QUIC 的 port,點選左上角 Edit → Preferences → Protocols → QUIC,看到以下界面

這邊填上 4433,下面的實驗我們都會跑在 UDP 4433 port 上面,設定完這個步驟才能把 UDP 封包識別成 QUIC 的封包

那準備完成後可以來試著撈 QUIC 封包了,現在 wireshark 在監聽 lo 的流量。

實驗

這次抓包的對象是 Day6 編譯的 ngtcp2 範例,先切換到編譯完的 examples/ 底下

$ cd /ngtcp2/examples/

如果之前有編譯成功,應該可以在這個資料夾底下看到 server, client 兩個執行檔,請先分別開兩個視窗,並先開啟 server 後再開啟 client

在 client 的 terminal 請設定環境變數 SSLKEYLOGFILE

$ export SSLKEYLOGFILE=~/Desktop/quic/ngtcp2/examples/sslkeylog.log

延伸閱讀

這個環境變數可以讓保留 D-H 演算法交換的金鑰,因為 QUIC 封包原則上都是加密的,我們必須要額外設定這個環境變量才能正確的解密封包資料。

接著先把 Server 開啟

$ ./server 127.0.0.1 4433 server.key server.crt

再開啟 Client,等 Client 連線成功後,按下 Ctrl + c 中斷,應該會看到以下畫面

$ ./client 127.0.0.1 4433 -i

這時候在我們設定 SSLKEYLOGFILE 的路徑應該會出現 sslkeylog.log 這個檔案,裡面存有剛剛 QUIC 交互時使用的金鑰

確認後請在 wireshark 中設定,點選 Edit → Preferences → Protocols → TLS

(Pre)-Master-Secret log filename 的地方填入 sslkeylog.log 的路徑

回到 wireshark 主頁面發現剛剛的交互過程成功被紀錄下來了,記得在搜索欄位先輸入 QUIC 把所有 QUIC 的封包的篩選出來

這樣子往後就可以一邊從 code 下手,一邊用 wireshark 查看實際的 QUIC 封包怎麼運作了,明天我們會簡單介紹一下 RFC9000 中關於 Handshark 的章節,並且配合 wireshark 觀察實際的狀況。

reference


上一篇
【Day 08】淺談 QUIC Handshake 流程 (二): 以密碼學角度簡述交互流程
下一篇
【Day 10】淺談 QUIC Handshake 流程 (四) - 怎麼利用 wireshark 去對照 RFC + 筆者的段落反思
系列文
快還要更快,讀作 quick 的下一代傳輸層協定: QUIC23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言