.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
ライブラリを介して接続コンテキスト属性にアクセスします。 このアプローチには、非公開のハンドルと構造の操作が含まれるため、移植性が低くなり、より複雑になる可能性があります。 (複雑で不安定になる可能性があるため、詳細な実装は省略しました。)
重要な考慮事項:
RemoteCertificateValidationCallback
: このコールバックは、使用されているセキュリティ プロトコルに関する洞察を提供し、TLS バージョンの識別に役立ちます。TcpClient
: TcpClient
を使用すると、 初期化WebRequest
前に TLS 情報を取得でき、プロアクティブな TLS バージョン決定が可能になります。この情報は、開発者が .NET アプリケーションで使用されるセキュリティ プロトコルを理解し、管理するのに役立ちます。 リフレクションの使用とアンマネージド ライブラリとの対話に関連する影響と潜在的なリスクを慎重に考慮してください。
以上が.NET でネゴシエートされた TLS バージョンを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。