如何测试我的 .NET 客户端正在使用哪个版本的 TLS?

问题描述 投票:0回答:6

我支持一个 .NET 站点(其中包括许多其他内容)与来自供应商系统的远程 API 进行通信。

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

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

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

要么:

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

或者

  • 有人可以建议一种替代方法来测试更改是否有效。
.net fiddler wireshark packet-sniffers tls1.2
6个回答
60
投票

如果您在Fiddler中打开“CONNECTS”,您可以在Inspectors -> TextView

中看到TLS/SSL版本


要打开连接,请转到菜单栏中的

Rules
,然后删除“隐藏连接”中的选中标记

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

参考:在Fiddler中查看HTTPS握手


12
投票

如果您在 Wireshark 中捕获连接创建,并检查来自客户端的第一个数据包,则 Wireshark 将为您注释

ClientHello
结构中的字段,包括客户端请求的 TLS 版本。

同样,如果您查看来自服务器的第一个回复数据包,则 Wireshark 将为您注释

ServerHello
结构中的字段,包括为连接确定的 TLS 版本。

请参阅此博文此篇了解工作示例。


10
投票

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

本知识库介绍如何打开 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 以确定实际使用的版本。


4
投票

如果您向 https://check-tls.akamai.io/v1/tlsinfo.json 发出 HTTP GET 请求,它将使用客户端请求中使用的 TLS 版本进行响应;

var http = new HttpClient();
const string url = "https://check-tls.akamai.io/v1/tlsinfo.json";
var result = http.GetStringAsync(url).Result;


2
投票

还可以使用curl工具https://curl.se/探测和确定TLS/SSL版本,如下所示。

命令

curl -v -k https://host:port --tlsv1.1 --tls-max 1.1 

使用特定的 TLS 最低和最高版本向主机发送 https GET 请求。所以上面的命令强制客户端和服务器使用 TLS 1.1。您可以从输出中看到失败并显示错误消息

SSL_ERROR_PROTOCOL_VERSION_ALERT

此错误的原因是主机配置为使用 TLS 最低版本 1.2

绿色标记的第二个命令成功,因为客户端和服务器都支持 TLS v1.2


0
投票

使用下面的简单方法,您可以获得您的 Web 应用程序正在使用的 TLS 版本的答案。不需要代码、RunTime 或 Adv 网络工具。

© www.soinside.com 2019 - 2024. All rights reserved.