La détermination de la version TLS négociée lors d'une requête Web peut fournir des informations précieuses à des fins de débogage et de journalisation.
.NET 4.7 utilise TLS 1.2 par défaut pour les requêtes HTTP. Cependant, il est souvent nécessaire de déterminer la version spécifique de TLS réellement établie lors de la connexion.
Cet article explore diverses techniques pour extraire ces informations du flux renvoyé par HttpWebRequest.GetRequestStream()
ou HttpWebRequest.GetResponseStream()
.
Grâce à la réflexion, nous pouvons accéder à la valeur de la propriété TlsStream
->SslState
->SslProtocol
. Cette méthode fonctionne à la fois pour les flux compressés et non compressés. De plus, la validation se produit lorsque la requête est initialisée à l'aide de request.GetRequestStream()
.
Envisagez d'utiliser TcpClient()
s'il est essentiel d'obtenir des informations sur le protocole avant d'initialiser la WebRequest. En établissant la connexion en utilisant les mêmes paramètres que WebRequest (protocoles pris en charge et vérification du certificat), vous pouvez déterminer le protocole TLS qui sera négocié avec le serveur cible.
secur32.dll
-> QueryContextAttributesW()
peut être utilisée pour interroger le contexte de sécurité de connexion d'un flux initialisé. Cependant, le handle de contexte requis n'est pas public et n'est accessible que via la réflexion ou la classe AuthenticatedStream
. Malheureusement, ces classes ne sont pas compatibles avec les flux renvoyés par WebRequest/WebResponse.
Si la requête renvoie un flux qui a été décompressé (par exemple, GZIP ou Deflate), le TlsStream
sous-jacent doit être extrait avant de procéder avec la méthode ci-dessus.
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!