47

我支持一个 .NET 站点,该站点(在许多、许多其他事物中)与来自供应商系统的远程 API 对话。

我们想要升级以支持 TLS 1.2 我们希望按照这个问题来做:是否有 TLS 1.2 的 .NET 实现?

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

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

任何一个:

  • 有人可以指出如何在 Fiddler/WireShark 中收集数据的综合指南的方向吗

或者

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

3 回答 3

55

如果您在Fiddler中打开“ CONNECTS ” ,您可以在 Inspectors -> TextView 中看到 TLS/SSL 版本

TLS 1.2 版的屏幕截图连接到 Google.com


要打开连接,请转到Rules菜单栏中并取消选中“隐藏连接”

打开连接截图

注意:必须禁用解密 HTTPs 流量

禁用解密 https 流量选项屏幕截图

参考:在 Fiddler 中查看 HTTPS 握手

于 2017-02-02T19:01:30.707 回答
12

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

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

有关工作示例,请参阅此博客文章此文章。

于 2015-12-14T21:52:08.787 回答
9

System.Net 跟踪确实包含足够的详细信息来检查这一点,尽管它不是很容易访问。

此 KB 描述了如何打开 System.Net 跟踪。

此博客文章显示了 System.Net 跟踪中的完整 HTTPS 请求

通过线路发送的字节被记录下来,在该博客文章中给出的示例中,客户端流开始:

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 并解释 ClientHello 是预期的第一条消息并说明其格式

  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;

这个 SO 答案解释了记录以 0x16 作为类型标记开始,然后是协议版本。

上面显示的会话版本为 3.0,即 SSL 3.0

RFC 解释说 3.3 是 TLS 1.2。

因此,如果您的客户端数据以“ 16 03 03”开头,那么您的客户端正在尝试协商 TLS 1.2。

您可能需要检查 ServerHello 以确定实际使用的版本。

于 2015-12-14T21:19:53.637 回答