2015-12-14 91 views
16

我支持.NET站點(其中有很多很多其他的東西)與來自供應商系統的遠程API進行對話。如何測試我的.Net客戶端正在使用哪個版本的TLS

我們希望升級到支持TLS 1.2 我們希望按這個問題可以這樣做:Are there .NET implementation of TLS 1.2?

但我怎麼檢查,這是實際工作,一旦我做了改變。

理想情況下,我的一個供應商網站將開始使用TLS 1.2 僅限於,然後我的測試可能只是「我們現在可以與該供應商談談嗎?」但我們沒有這個。 我猜我可以用某種數據包嗅探器做點什麼,但我不知道我在找什麼,也不知道如何設置嗅探器以可讀的方式收集必要的數據。

或者:

  • 有人能指出我在一個全面的指南,如何收集數據提琴手/ Wireshark的方向

或者

  • 可有人建議的測試變更是否奏效的替代方法。

回答

7

如果您捕獲Wireshark中的連接創建,並檢查來自客戶端的第一個數據包,則Wireshark將爲您註釋ClientHello結構中的字段,包括客戶端請求的TLS版本。同樣,如果您查看來自服務器的第一個回覆數據包,則Wireshark將爲您註釋ServerHello結構中的字段,包括爲連接確定的TLS版本。

查看this blog postthis one的工作示例。

+0

謝謝,這最終是獲得我需要的確認的最快方式。 – Brondahl

6

System.Net跟蹤確實包含足夠的詳細信息來檢查這一點,雖然它不是很容易訪問。

This KB describes how to turn on System.Net tracing.

This blog post shows a full HTTPS request in System.Net tracing

通過線路發送的字節被記錄,並且在該博客文章中給出的例子中,客戶流開始:

System.Net.Sockets Verbose: 0 : [3848] Data from Socket#48285313::Send 
System.Net.Sockets Verbose: 0 : [3848] 00000000 : 16 03 00 00 41 01 00 00-3D 03 00 43 26 02 90 83 : ....A...=..C&... 

RFC5246描述TLS 1.2和explains that ClientHello is the first message expected and states its format

struct { 
     ProtocolVersion client_version; 
     Random random; 
     SessionID session_id; 
     CipherSuite cipher_suites<2..2^16-2>; 
     CompressionMethod compression_methods<1..2^8-1>; 
     select (extensions_present) { 
      case false: 
       struct {}; 
      case true: 
       Extension extensions<0..2^16-1>; 
     }; 
    } ClientHello; 

This SO answer explains該記錄以0x16作爲類型標記開始,然後是協議版本。

上面顯示的會話有版本3.0,which means SSL 3.0

The RFC explains 3.3是TLS 1.2。

所以,如果您的客戶端數據開始「16 03 03」,那麼你的客戶正試圖協商TLS 1.2。

您可能需要檢查ServerHello以確定實際使用的版本。

相關問題