.NETアプリケーションで交渉されたTLSバージョンの決定
。net 4.7は、httpリクエストのTLS 1.2にデフォルトです。ただし、接続確立中に使用される実際のTLSバージョンはさまざまです。 このガイドは、ネゴシエートされたTLSバージョンを決定するための2つの方法の概要を説明します。
方法1:Reflection
この手法は、内部プロパティとフィールドにアクセスするための反射を活用して、SSLプロトコルバージョンを取得します。 これは内部APIに依存しており、将来の.NETアップデートで変更される可能性があることに注意してください。
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) ...
方法2:セキュア接続コンテキスト属性(Advanced)
このメソッドは、 secur32.dll
ライブラリを介して接続コンテキスト属性にアクセスします。 このアプローチには、非公開のハンドルと構造を使用することが含まれ、携帯性が低くなり、潜在的に複雑になります。 (複雑さと潜在的な不安定性のために詳細な実装が省略されています。)
重要な考慮事項:
remotecertificatevalidationCallback
:このコールバックは、採用されているセキュリティプロトコルに関する洞察を提供し、TLSバージョンの識別を支援します。
:
を使用して tcpclient を使用すると、
WebRequest
の前にtls情報を取得できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3