>백엔드 개발 >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 버전을 확인하는 방법은 무엇입니까?

웹 요청 중에 협상된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.