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

sbtkgmzw  于 2023-03-04  发布在  .NET
关注(0)|答案(5)|浏览(194)

我支持一个. NET网站,其中(许多,许多,其他东西)交谈远程API从供应商系统。
我们希望升级以支持TLS 1.2我们希望按照以下问题进行升级:Are there .NET implementation of TLS 1.2?
但是我如何检查在我做了更改之后它是否真的工作。
理想情况下,我的一个供应商站点将开始使用TLS 1.2ONLY,然后我的测试可以只是"我们现在可以与该供应商交谈吗?"但我们没有。我猜我可以用某种数据包嗅探器做一些事情,但我不知道我到底在寻找什么,也不知道如何设置嗅探器以可读的方式收集必要的数据。
或者:

  • 有人能告诉我如何在Fiddler/WireShark中收集这些数据的综合指南的方向吗

或者

  • 有人能建议一种替代方法来测试更改是否有效吗?
vsmadaxz

vsmadaxz1#

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

要打开“连接”,请转到菜单栏中的Rules,然后从“隐藏连接”中 * 删除 * 复选框

  • 注意:* 必须禁用解密HTTP通信

参考:Viewing HTTPS Handshakes in Fiddler

pvabu6sv

pvabu6sv2#

如果您在Wireshark中捕获连接创建,并检查来自客户端的第一个数据包,那么Wireshark将为您注解ClientHello结构体中的字段,包括客户端请求的TLS版本。
类似地,如果查看来自服务器的第一个应答数据包,Wireshark将为您注解ServerHello结构体中的字段,包括为连接确定的TLS版本。
工作示例参见this blog postthis one

z9smfwbn

z9smfwbn3#

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,并解释了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;

This SO answer explains记录以0x16作为类型标记开始,然后是协议版本。
上面显示的会话版本为3.0,which means SSL 3.0
RFC解释3.3是TLS 1.2。
因此,如果您的客户端数据以"16 03 03"开头,则您的客户端正在尝试协商TLS 1.2。
您可能需要检查ServerHello以确定实际使用的版本。

gz5pxeao

gz5pxeao4#

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

该命令

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

使用特定的TLS最低和最高版本向主机发送https GET请求。因此,上述命令强制客户端和服务器使用TLS 1.1。您可以从输出中看到,此操作失败,并显示错误消息
SSL错误协议版本警报
此错误的原因是主机配置为使用TLS最低版本1.2
标记为绿色的第二个命令成功,因为客户端和服务器都支持TLS v1.2

zbwhf8kr

zbwhf8kr5#

如果您向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;

相关问题