Web リクエスト中にネゴシエートされた TLS バージョンを特定すると、デバッグやロギングの目的で貴重な洞察が得られます。
.NET 4.7 は、HTTP リクエストにデフォルトで TLS 1.2 を使用します。ただし、多くの場合、接続中に実際に確立された特定の TLS バージョンを確認する必要があります。
この記事では、HttpWebRequest.GetRequestStream()
または HttpWebRequest.GetResponseStream()
によって返されたストリームからこの情報を抽出するためのさまざまな手法を検討します。
リフレクションを使用すると、TlsStream
->SslState
->SslProtocol
プロパティ値にアクセスできます。この方法は、圧縮ストリームと非圧縮ストリームの両方で機能します。さらに、検証は、request.GetRequestStream()
を使用してリクエストが初期化されるときに行われます。
WebRequest を初期化する前にプロトコル情報を取得することが重要な場合は、TcpClient()
の使用を検討してください。 WebRequest と同じ設定 (サポートされるプロトコルと証明書の検証) を使用して接続を確立することにより、ターゲット サーバーとネゴシエートする TLS プロトコルを決定できます。
secur32.dll
-> QueryContextAttributesW()
メソッドは、初期化されたストリームの接続セキュリティ コンテキストをクエリするために使用できます。ただし、必要なコンテキスト ハンドルはパブリックではなく、リフレクションまたは AuthenticatedStream
クラスを介してのみアクセスできます。残念ながら、これらのクラスは、WebRequest/WebResponse によって返されるストリームと互換性がありません。
リクエストが解凍されたストリーム (GZIP や Deflate など) を返す場合、上記のメソッドに進む前に、基になる TlsStream
を抽出する必要があります。
以上が.NET 4.7 HTTP リクエストでネゴシエートされた TLS バージョンを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。