確定 .NET 應用程式中協商的 TLS 版本
.NET 4.7 對於 HTTP 請求預設使用 TLS 1.2;但是,連線建立過程中使用的實際 TLS 版本可能會有所不同。 本指南概述了兩種確定協商的 TLS 版本的方法。
方法一:反思
此技術利用反射來存取內部屬性和欄位來取得 SSL 協定版本。 請注意,這依賴內部 API,並且可能會隨著未來的 .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>
方法 2:安全連線上下文屬性(進階)
此方法透過 secur32.dll
函式庫存取連線上下文屬性。 這種方法涉及使用非公共句柄和結構,使其不太可移植並且可能更複雜。 (由於複雜性和潛在的不穩定性,省略了詳細的實現。)
重要注意事項:
RemoteCertificateValidationCallback
: 此回呼提供了對所使用的安全協定的深入了解,有助於 TLS 版本識別。 TcpClient
: 使用 TcpClient
允許在 初始化之前檢索 TLS 信息,從而啟用主動 TLS 版本確定。 WebRequest
以上是如何確定 .NET 中協商的 TLS 版本?的詳細內容。更多資訊請關注PHP中文網其他相關文章!