Maison >développement back-end >C++ >Comment puis-je déterminer la version TLS négociée dans .NET ?

Comment puis-je déterminer la version TLS négociée dans .NET ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-10 09:14:42877parcourir

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

Détermination de la version TLS négociée dans les applications .NET

.NET 4.7 est par défaut TLS 1.2 pour les requêtes HTTP ; cependant, la version réelle de TLS utilisée lors de l'établissement de la connexion peut varier. Ce guide présente deux méthodes pour déterminer la version TLS négociée.

Méthode 1 : Réflexion

Cette technique exploite la réflexion pour accéder aux propriétés et champs internes afin d'obtenir la version du protocole SSL. Notez que cela repose sur des API internes et pourrait changer avec les futures mises à jour de .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>

Méthode 2 : Attributs de contexte de connexion sécurisée (avancé)

Cette méthode accède aux attributs du contexte de connexion via la bibliothèque secur32.dll. Cette approche implique de travailler avec des descripteurs et des structures non publics, ce qui la rend moins portable et potentiellement plus complexe. (Mise en œuvre détaillée omise en raison de la complexité et de l'instabilité potentielle.)

Considérations importantes :

  • Version .NET : La prise en charge de TLS 1.3 nécessite .NET Framework 4.8 ou version ultérieure, ou .NET Core 3.0 .
  • RemoteCertificateValidationCallback : Ce rappel offre un aperçu des protocoles de sécurité utilisés, facilitant l'identification de la version TLS.
  • TcpClient : L'utilisation de TcpClient permet de récupérer les informations TLS avant WebRequest l'initialisation, permettant une détermination proactive de la version TLS.

Ces informations aident les développeurs à comprendre et à gérer les protocoles de sécurité utilisés par leurs applications .NET. N'oubliez pas d'examiner attentivement les implications et les risques potentiels associés à l'utilisation de la réflexion et à l'interaction avec des bibliothèques non gérées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn