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

如何确定 .NET 中协商的 TLS 版本?

Susan Sarandon
Susan Sarandon原创
2025-01-10 09:14:42877浏览

How Can I Determine the Negotiated TLS Version in .NET?

确定 .NET 应用程序中协商的 TLS 版本

.NET 4.7 对于 HTTP 请求默认使用 TLS 1.2;但是,连接建立过程中使用的实际 TLS 版本可能会有所不同。 本指南概述了两种确定协商的 TLS 版本的方法。

方法一:反思

该技术利用反射来访问内部属性和字段来获取 SSL 协议版本。 请注意,这依赖于内部 API,并且可能会随着未来的 .NET 更新而改变。

<code class="language-csharp">using System.IO.Compression;
using System.Net;
using System.Net.Security;
using System.Reflection;
using System.Security.Authentication;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

// ... other code ...

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | 
                                       SecurityProtocolType.Tls11 | 
                                       SecurityProtocolType.Tls12 | 
                                       SecurityProtocolType.Tls13;

// ... other code ...

Uri requestUri = new Uri("https://somesite.com");
var request = WebRequest.CreateHttp(requestUri);

// ... other code ...

using (var requestStream = request.GetRequestStream()) {
    // Request stream validated; now extract SSL protocol
    SslProtocols sslProtocol = ExtractSslProtocol(requestStream);
    if (sslProtocol != SslProtocols.None) {
        // Process the sslProtocol value
    }
}

// ... ExtractSslProtocol function (implementation would be provided here) ...</code>

方法 2:安全连接上下文属性(高级)

此方法通过 secur32.dll 库访问连接上下文属性。 这种方法涉及使用非公共句柄和结构,使其不太可移植并且可能更复杂。 (由于复杂性和潜在的不稳定性,省略了详细的实现。)

重要注意事项:

  • .NET 版本: TLS 1.3 支持需要 .NET Framework 4.8 或更高版本,或 .NET Core 3.0 。
  • RemoteCertificateValidationCallback: 此回调提供了对所使用的安全协议的深入了解,有助于 TLS 版本识别。
  • TcpClient 使用 TcpClient 允许在 初始化之前检索 TLS 信息,从而启用主动 TLS 版本确定。WebRequest
此信息可帮助开发人员了解和管理其 .NET 应用程序使用的安全协议。 请记住仔细考虑与使用反射以及与非托管库交互相关的影响和潜在风险。

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

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