Die Bestimmung der während einer Webanfrage ausgehandelten TLS-Version kann wertvolle Erkenntnisse für Debugging- und Protokollierungszwecke liefern.
.NET 4.7 verwendet standardmäßig TLS 1.2 für HTTP-Anfragen. Allerdings ist es oft notwendig, die konkrete TLS-Version zu ermitteln, die während der Verbindung tatsächlich aufgebaut wurde.
In diesem Artikel werden verschiedene Techniken zum Extrahieren dieser Informationen aus dem von HttpWebRequest.GetRequestStream()
oder HttpWebRequest.GetResponseStream()
zurückgegebenen Stream untersucht.
Mithilfe der Reflexion können wir auf den Eigenschaftswert TlsStream
->SslState
->SslProtocol
zugreifen. Diese Methode funktioniert sowohl für komprimierte als auch für unkomprimierte Streams. Darüber hinaus erfolgt die Validierung, wenn die Anforderung mit request.GetRequestStream()
initialisiert wird.
Erwägen Sie die Verwendung von TcpClient()
, wenn es wichtig ist, Protokollinformationen vor der Initialisierung der WebRequest abzurufen. Indem Sie die Verbindung mit denselben Einstellungen wie WebRequest (unterstützte Protokolle und Zertifikatsüberprüfung) herstellen, können Sie das TLS-Protokoll bestimmen, das mit dem Zielserver ausgehandelt wird.
secur32.dll
-> kann der Verbindungssicherheitskontext eines initialisierten Streams abgefragt werden. Das erforderliche Kontexthandle ist jedoch nicht öffentlich und kann nur über Reflection oder die Klasse QueryContextAttributesW()
aufgerufen werden. Leider sind diese Klassen nicht mit den von WebRequest/WebResponse zurückgegebenen Streams kompatibel. AuthenticatedStream
extrahiert werden, bevor mit der oben genannten Methode fortgefahren werden kann. TlsStream
Das obige ist der detaillierte Inhalt vonWie kann ich die ausgehandelte TLS-Version in einer .NET 4.7-HTTP-Anfrage ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!