確定 Web 請求期間協商的 TLS 版本,對於偵錯和日誌記錄目的而言,可以提供寶貴的見解。
.NET 4.7 預設情況下,對 HTTP 請求使用 TLS 1.2。但是,通常需要確定連線期間實際建立的特定 TLS 版本。
本文探討了從 HttpWebRequest.GetRequestStream()
或 HttpWebRequest.GetResponseStream()
返回的流中提取此資訊的各種技術。
使用反射,我們可以存取 TlsStream
->SslState
->SslProtocol
屬性值。此方法適用於壓縮流和未壓縮流。此外,驗證在使用 request.GetRequestStream()
初始化請求時發生。
如果在初始化 WebRequest 之前取得協定資訊至關重要,請考慮使用 TcpClient()
。透過使用與 WebRequest 相同的設定(支援的協定和憑證驗證)建立連接,您可以確定將與目標伺服器協商的 TLS 協定。
secur32.dll
-> QueryContextAttributesW()
方法可用來查詢已初始化流的連線安全上下文。但是,所需的上下文句柄不是公共的,只能透過反射或 AuthenticatedStream
類別存取。不幸的是,這些類別與 WebRequest/WebResponse 傳回的流不相容。
如果請求傳回的流已被解壓縮(例如,GZIP 或 Deflate),則必須在繼續使用上述方法之前提取底層的 TlsStream
。
以上是如何確定 .NET 4.7 HTTP 請求中協商的 TLS 版本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!