【问题标题】:How to test which version of TLS my .NET client is using?如何测试我的 .NET 客户端使用的 TLS 版本?
【发布时间】:2016-03-20 11:37:14
【问题描述】:

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

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

但是,一旦我进行了更改,我如何检查这是否真的有效。

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

要么:

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

或者

  • 谁能建议一种替代方法来测试更改是否有效。

【问题讨论】:

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


    【解决方案1】:

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


    要打开 Connects,请转到菜单栏中的 Rules删除“隐藏 CONNECTs”中的检查

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

    参考:Viewing HTTPS Handshakes in Fiddler

    【讨论】:

    • 应注意,需要禁用“解密 HTTPS 流量”才能使其正常工作。在链接到的文章中提到它,但我猜这可能会消失。
    • Fiddler 不支持 TLS 1.3,所以无论如何也无法检查。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2017-04-08
        • 2012-02-11
        • 1970-01-01
        • 2014-01-29
        相关资源
        最近更新 更多