Heim > Backend-Entwicklung > C++ > Wie ermittelt man die ausgehandelte TLS-Version in .NET-Anwendungen?

Wie ermittelt man die ausgehandelte TLS-Version in .NET-Anwendungen?

Linda Hamilton
Freigeben: 2025-01-10 08:14:40
Original
971 Leute haben es durchsucht

How to Determine the Negotiated TLS Version in .NET Applications?

Ausgehandelte TLS-Version ermitteln

Beim Initiieren eines Netzwerk-Handshakes über TLS ist es für Debugging- oder Protokollierungszwecke oft hilfreich, die spezifische TLS-Version zu ermitteln, auf die man sich geeinigt hat. In diesem Artikel werden Möglichkeiten zum Abrufen dieser Informationen für verschiedene Szenarien untersucht.

Verwenden Sie die .NET Reflection API

Für .NET-Anwendungen, die auf Framework 4.7 oder höher ausgeführt werden, nutzt die folgende Methode Reflektion, um auf den zugrunde liegenden TlsStream zuzugreifen und das ausgehandelte TLS-Protokoll zu extrahieren:

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

// 获取与网络请求关联的TLS流
using (var requestStream = request.GetRequestStream())
{
    // 利用反射访问TLS流的属性
    var tlsStream = requestStream.GetType()
        .GetProperty("Connection", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(requestStream);
    var tlsState = tlsStream.GetType()
        .GetProperty("NetworkStream", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(tlsStream);
    var sslProtocol = (SslProtocols)tlsState.GetType()
        .GetProperty("SslProtocol", BindingFlags.Instance | BindingFlags.NonPublic)
        .GetValue(tlsState);

    // 处理协商的TLS协议(例如,日志记录或显示)
}</code>
Nach dem Login kopieren

Rückruf zur Überprüfung des Serverzertifikats verwenden

Ein anderer Ansatz besteht darin, ServerCertificateValidationCallback zu verwenden, das aufgerufen wird, wenn eine TLS-Verbindung hergestellt wird. So wird diese Methode integriert:

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

// 设置ServerCertificateValidationCallback
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => {
    // 获取TLS协议版本
    var sslProtocol = ((SslStream)sender).SslProtocol;

    // 处理协商的TLS协议(例如,日志记录或显示)
    return true;  // 回调也可以用于证书验证,此处作为一个示例显示。
};</code>
Nach dem Login kopieren

Verwenden Sie die .NET-Sicherheits-DLL

Eine fortgeschrittene Technik umfasst schließlich die Verwendung der QueryContextAttributesW-Methode in secur32.dll, um auf die Sicherheitskontextattribute zuzugreifen. Diese Methode kann detailliertere Informationen über die hergestellte sichere Verbindung liefern.

<code class="language-csharp">using System;
using System.Runtime.InteropServices;

[DllImport("secur32.dll", CharSet = CharSet.Auto, ExactSpelling = true, SetLastError = false)]
private static extern int QueryContextAttributesW(
    IntPtr contextHandle,
    ContextAttribute attribute,
    ref SecPkgContext_ConnectionInfo connectionInfo);

public enum ContextAttribute
{
    // 获取TLS协议版本
    SecPkgContext_ConnectionInfo = 0x9
}

public struct SecPkgContext_ConnectionInfo
{
    public SchProtocols dwProtocol;
    // 其他属性也可以用于获取有关密码和哈希算法的信息
}</code>
Nach dem Login kopieren

Hinweis: Diese Methode erfordert Zugriff auf nicht öffentliche Eigenschaften und Felder, was sie zu einer weniger direkten Methode macht.

Durch die Implementierung dieser Technologien können Entwickler ausgehandelte TLS-Versionen für HttpWebRequest- und TcpClient-Verbindungen abrufen und so wertvolle Informationen zum Debuggen und Protokollieren erfassen.

Das obige ist der detaillierte Inhalt vonWie ermittelt man die ausgehandelte TLS-Version in .NET-Anwendungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage