如何测试我的.Net客户端使用的TLS版本

时间:2015-12-14 20:51:53

标签: .net fiddler wireshark packet-sniffers tls1.2

我支持一个.NET站点(其中很多,很多,其他东西)与供应商系统的远程API通信。

我们希望升级以支持TLS 1.2 我们希望按照这个问题这样做:Are there .NET implementation of TLS 1.2?

但是,一旦我做出改变,我怎么检查这是否真的有效。

理想情况下,我的一个供应商网站将开始使用TLS 1.2 ,然后我的测试可能只是“我们现在可以与该供应商交谈吗?”但我们没有那个。 我猜我可以用某种类型的数据包嗅探器做一些事情,但我不知道我究竟在寻找什么,也不知道如何设置嗅探器以可读的方式收集必要的数据。

或者:

  • 有人能指出我如何在Fiddler / WireShark中收集数据的综合指南

或者

  • 有人可以建议另一种方法来测试变更是否有效。

3 个答案:

答案 0 :(得分:34)

如果您在Fiddler中启用“ CONNECTS ”,则可以在Inspectors中查看TLS / SSL版本 - > TextView的

Screen Capture of TLS Version 1.2 Connect to Google.com

要启用“连接”,请转到菜单栏中的Rules,然后从<隐藏连接中删除支票

turn on connects screenshot

参考:Viewing HTTPS Handshakes in Fiddler

答案 1 :(得分:9)

如果您在Wireshark中捕获连接创建,并检查来自客户端的第一个数据包,那么Wireshark将为您注释ClientHello结构中的字段,包括客户端请求的TLS版本。

同样,如果您查看来自服务器的第一个回复数据包,那么Wireshark将为您注释ServerHello结构中的字段,包括为连接确定的TLS版本。

有关工作示例,请参阅this blog postthis one

答案 2 :(得分:8)

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