ホームページ >バックエンド開発 >C++ >.NET でネゴシエートされた TLS バージョンを確認するにはどうすればよいですか?

.NET でネゴシエートされた TLS バージョンを確認するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-10 09:14:42877ブラウズ

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

.NET アプリケーションでネゴシエートされた TLS バージョンを決定する

.NET 4.7 では、HTTP リクエストに対してデフォルトで TLS 1.2 が使用されます。ただし、接続の確立中に使用される実際の TLS バージョンは異なる場合があります。 このガイドでは、ネゴシエートされた TLS バージョンを決定するための 2 つの方法について概説します。

方法 1: リフレクション

この手法では、リフレクションを利用して内部プロパティとフィールドにアクセスし、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 を使用すると、 初期化WebRequest前に TLS 情報を取得でき、プロアクティブな TLS バージョン決定が可能になります。

この情報は、開発者が .NET アプリケーションで使用されるセキュリティ プロトコルを理解し、管理するのに役立ちます。 リフレクションの使用とアンマネージド ライブラリとの対話に関連する影響と潜在的なリスクを慎重に考慮してください。

以上が.NET でネゴシエートされた TLS バージョンを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。