首页 >后端开发 >C++ >如何确定 .NET 4.7 HTTP 请求中协商的 TLS 版本?

如何确定 .NET 4.7 HTTP 请求中协商的 TLS 版本?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-10 08:55:45434浏览

How Can I Determine the Negotiated TLS Version in a .NET 4.7 HTTP Request?

如何确定协商的 TLS 版本?

确定 Web 请求期间协商的 TLS 版本,对于调试和日志记录目的而言,可以提供宝贵的见解。

.NET 4.7 默认情况下,对 HTTP 请求使用 TLS 1.2。但是,通常需要确定连接期间实际建立的特定 TLS 版本。

本文探讨了从 HttpWebRequest.GetRequestStream()HttpWebRequest.GetResponseStream() 返回的流中提取此信息的各种技术。

反射方法

使用反射,我们可以访问 TlsStream->SslState->SslProtocol 属性值。此方法适用于压缩流和未压缩流。此外,验证在使用 request.GetRequestStream() 初始化请求时发生。

TcpClient 替代方案

如果在初始化 WebRequest 之前获取协议信息至关重要,请考虑使用 TcpClient()。通过使用与 WebRequest 相同的设置(支持的协议和证书验证)建立连接,您可以确定将与目标服务器协商的 TLS 协议。

Secur32.dll 调用

secur32.dll -> QueryContextAttributesW() 方法可用于查询已初始化流的连接安全上下文。但是,所需的上下文句柄不是公共的,只能通过反射或 AuthenticatedStream 类访问。不幸的是,这些类与 WebRequest/WebResponse 返回的流不兼容。

解压缩流检查

如果请求返回的流已进行解压缩(例如,GZIP 或 Deflate),则必须在继续使用上述方法之前提取底层的 TlsStream

以上是如何确定 .NET 4.7 HTTP 请求中协商的 TLS 版本?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn