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

如何確定 .NET 中協商的 TLS 版本?

Susan Sarandon
發布: 2025-01-10 09:14:42
原創
874 人瀏覽過

How Can I Determine the Negotiated TLS Version in .NET?

確定 .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 函式庫存取連線上下文屬性。 這種方法涉及使用非公共句柄和結構,使其不太可移植並且可能更複雜。 (由於複雜性和潛在的不穩定性,省略了詳細的實現。)

重要注意事項:

  • .NET 版本: TLS 1.3 支援需要 .NET Framework 4.8 或更高版本,或 .NET Core 3.0 。
  • RemoteCertificateValidationCallback: 此回呼提供了對所使用的安全協定的深入了解,有助於 TLS 版本識別。
  • TcpClient 使用 TcpClient 允許在 初始化之前檢索 TLS 信息,從而啟用主動 TLS 版本確定。 WebRequest
此資訊可協助開發人員了解並管理其 .NET 應用程式所使用的安全協定。 請記住仔細考慮與使用反射以及與非託管庫互動相關的影響和潛在風險。

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

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