分析SQL Server連線HandShake使用TLS版本-使用NetMon及WireShark

延續上一次建置SQL Server連結伺服器的問題, 在使用Microsoft Network Monitor(NetMon)錄得封包並找到原因後, 又做了一點進一步的研究。在下載NetMon時發現官方對它已不再維護了, 又在相關文章中看到另一個繼任者—-Microsoft Message Analyzer(MMA), 但以下文章中有提到它2019/11月起也已不再維護, 文章分別如下, 只是文章的日期看了讓人有點前後錯亂, 就提供給大家自行判斷吧。

就在NetMon及MMA都不再更新後, 官方也乾脆推薦第三方工具, 首推如Wireshark。Wireshark可以直接分析NetMon錄出來的檔案(*.cap), 不過我在使用的時候卻發現一個狀況, 由於前一篇文是錄SQL Server的封包, 這裡看到的狀況也就是在SQL Server的封包上。

首先來說HandShake封包, 針對如OS層發出的HandShake封包, 不論在NetMon或是Wireshark界面上看來是很像的。例如下面這個是在Wireshark上看到OS的HandShake封包清單, 有Client Hello、Server Hello等等, 這點在NetMon上也是很相似的

Wireshark-OS層 HandShake封包

下面這個就是NetMon上看到Client Hello封包內與TLS有關的部份

NetMon-OS層 ClientHello內容樣式

下面這個則是在Wireshark上看到Client Hello封包與TLS有關的內容, 是不是和上面很相似?

Wireshark-OS層 ClientHello內容樣式

但如果進一步來看SQL Server的HandShake封包清單, NetMon部份仍像是上面那畫面一樣, 但Wireshark卻像下面這樣, 不太相同了, 所以, 我一開始一直找不到, 最後透過Frame Number一一對照, 才確認了SQL Server的HandShake在Wireshark中是如下的樣式。

Wireshark-SQL HandShake封包

而且, 在Wireshark封包中最下面就只有如下一行Pre-Login Message - TLS exchange, 沒有更詳細的內容,

Wireshark-SQL ClientHello內容樣式

相對於以上, 在NetMon上則是有如下更多詳細內容可看, 而且比較像上面OS層的HandShake封包的表示方式。

NetMon-SQL ClientHello內容樣式

再來是針對TLS版本的進一步研究。在NetMon上因為可以很清楚地看到每個封包使用的TLS版本, 像是上一次SQL Server的分析結果, 例如第一個Client Hello發出的是TLS 1.2(下圖), 而因為遠端SQL Server 2005不支援TLS 1.2, 所以Server Hello回來的是TLS 1.0(下下圖)。這裡的版本, 可以在Frame Details視窗內清楚地看到,

NetMon-TLS 1.2版本標示
NetMon-TLS 1.0版本標示

但是, 到了Wireshark上, 因為如上面提到, 在SQL Server封包的TLS方面沒有太多詳細資訊, 變成要以其他方式來辨別。這裡得用Packet Bytes視窗(相當於NetMon中的Hex Details)來加以分析。

WireShark-TLS 1.2版本標示

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料