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

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

Barbara Streisand
Freigeben: 2025-01-10 08:03:52
Original
332 Leute haben es durchsucht

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

Ausgehandelte TLS-Version ermitteln

.NET Framework 4.7-Anwendungen verwenden standardmäßig TLS 1.2. Es ist jedoch wichtig, die spezifische TLS-Version zu bestimmen, die während der sicheren Kommunikation ausgehandelt wird. So geht's:

Methode 1: Reflexion nutzen

Bei dieser Technik wird Reflektion verwendet, um auf die internen GetRequestStream() Eigenschaften des GetResponseStream() oder TlsStream zurückgegebenen Streams zuzugreifen. Die TlsStream-Klasse stellt das SslState-Attribut bereit, das Zugriff auf die SslProtocol-Eigenschaften bietet.

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

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(decodedUri);
using (Stream requestStream = request.GetRequestStream())
{
    SslProtocols sslProtocol = ExtractSslProtocol(requestStream);
    // 检查SSL版本,如有必要采取适当的措施
}

private SslProtocols ExtractSslProtocol(Stream stream)
{
    BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
    Stream metaStream = stream;

    // 处理GZip或Deflate流
    if (stream is GZipStream) metaStream = (stream as GZipStream).BaseStream;
    else if (stream is DeflateStream) metaStream = (stream as DeflateStream).BaseStream;

    var tlsStream = metaStream.GetType().GetProperty("Connection", bindingFlags).GetValue(metaStream);
    if (!(bool)tlsStream.GetType().GetProperty("UsingSecureStream", bindingFlags).GetValue(tlsStream)) return SslProtocols.None;

    var tlsState = tlsStream.GetType().GetField("m_Worker", bindingFlags).GetValue(tlsStream);
    return (SslProtocols)tlsState.GetType().GetProperty("SslProtocol", bindingFlags).GetValue(tlsState);
}</code>
Nach dem Login kopieren

Methode 2: TcpClient verwenden

Alternativ können Sie die Klasse TcpClient verwenden, um eine TCP-Verbindung herzustellen. TcpClient bietet auch Zugriff auf SslStream, sodass Sie die ausgehandelte TLS-Version überprüfen können. Diese Methode ist nützlich, wenn Sie die TLS-Version ermitteln müssen, bevor Sie eine HTTP-Anfrage initiieren.

<code class="language-csharp">TlsInfo tlsInfo = null;
IPHostEntry dnsHost = await Dns.GetHostEntryAsync(HostURI.Host);
using (TcpClient client = new TcpClient(dnsHost.HostName, 443))
{
    using (SslStream sslStream = new SslStream(client.GetStream(), false,
                                               TlsValidationCallback, null))
    {
        sslstream.AuthenticateAsClient(dnsHost.HostName, null,
                                      (SslProtocols)ServicePointManager.SecurityProtocol, false);
        tlsInfo = new TlsInfo(sslStream);
    }
}

public class TlsInfo
{
    public TlsInfo(SslStream secStream)
    {
        this.ProtocolVersion = secStream.SslProtocol;
    }

    public SslProtocols ProtocolVersion { get; set; }
}</code>
Nach dem Login kopieren

Beide Methoden bieten eine Möglichkeit, die ausgehandelte TLS-Version während der sicheren HTTP-Kommunikation zu bestimmen, sodass Sie fundierte Entscheidungen basierend auf Ihren Sicherheitsanforderungen treffen können.

Das obige ist der detaillierte Inhalt vonWie ermittelt man die ausgehandelte TLS-Version in .NET Framework?. 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