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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-10 08:55:45435ブラウズ

How Can I Determine the Negotiated TLS Version in a .NET 4.7 HTTP Request?

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

Web リクエスト中にネゴシエートされた TLS バージョンを特定すると、デバッグやロギングの目的で貴重な洞察が得られます。

.NET 4.7 は、HTTP リクエストにデフォルトで TLS 1.2 を使用します。ただし、多くの場合、接続中に実際に確立された特定の TLS バージョンを確認する必要があります。

この記事では、HttpWebRequest.GetRequestStream() または HttpWebRequest.GetResponseStream() によって返されたストリームからこの情報を抽出するためのさまざまな手法を検討します。

反映方法

リフレクションを使用すると、TlsStream->SslState->SslProtocol プロパティ値にアクセスできます。この方法は、圧縮ストリームと非圧縮ストリームの両方で機能します。さらに、検証は、request.GetRequestStream() を使用してリクエストが初期化されるときに行われます。

TcpClient の代替

WebRequest を初期化する前にプロトコル情報を取得することが重要な場合は、TcpClient() の使用を検討してください。 WebRequest と同じ設定 (サポートされるプロトコルと証明書の検証) を使用して接続を確立することにより、ターゲット サーバーとネゴシエートする TLS プロトコルを決定できます。

Secur32.dll 呼び出し

secur32.dll -> QueryContextAttributesW() メソッドは、初期化されたストリームの接続セキュリティ コンテキストをクエリするために使用できます。ただし、必要なコンテキスト ハンドルはパブリックではなく、リフレクションまたは AuthenticatedStream クラスを介してのみアクセスできます。残念ながら、これらのクラスは、WebRequest/WebResponse によって返されるストリームと互換性がありません。

減圧流量検査

リクエストが解凍されたストリーム (GZIP や Deflate など) を返す場合、上記のメソッドに進む前に、基になる TlsStream を抽出する必要があります。

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

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