首頁 > 後端開發 > C++ > 如何確定 .NET 4.7 HTTP 請求中協商的 TLS 版本?

如何確定 .NET 4.7 HTTP 請求中協商的 TLS 版本?

Mary-Kate Olsen
發布: 2025-01-10 08:55:45
原創
456 人瀏覽過

How Can I Determine the Negotiated TLS Version in a .NET 4.7 HTTP Request?

如何決定協商的 TLS 版本?

確定 Web 請求期間協商的 TLS 版本,對於偵錯和日誌記錄目的而言,可以提供寶貴的見解。

.NET 4.7 預設情況下,對 HTTP 請求使用 TLS 1.2。但是,通常需要確定連線期間實際建立的特定 TLS 版本。

本文探討了從 HttpWebRequest.GetRequestStream()HttpWebRequest.GetResponseStream() 返回的流中提取此資訊的各種技術。

反射法

使用反射,我們可以存取 TlsStream->SslState->SslProtocol 屬性值。此方法適用於壓縮流和未壓縮流。此外,驗證在使用 request.GetRequestStream() 初始化請求時發生。

TcpClient 替代方案

如果在初始化 WebRequest 之前取得協定資訊至關重要,請考慮使用 TcpClient()。透過使用與 WebRequest 相同的設定(支援的協定和憑證驗證)建立連接,您可以確定將與目標伺服器協商的 TLS 協定。

Secur32.dll 呼叫

secur32.dll -> QueryContextAttributesW() 方法可用來查詢已初始化流的連線安全上下文。但是,所需的上下文句柄不是公共的,只能透過反射或 AuthenticatedStream 類別存取。不幸的是,這些類別與 WebRequest/WebResponse 傳回的流不相容。

解壓縮流檢查

如果請求傳回的流已被解壓縮(例如,GZIP 或 Deflate),則必須在繼續使用上述方法之前提取底層的 TlsStream

以上是如何確定 .NET 4.7 HTTP 請求中協商的 TLS 版本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板