2015-12-14 92 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以确定实际使用的版本。

相关问题