협상된 TLS 버전 확인
.NET Framework 4.7 애플리케이션은 기본적으로 TLS 1.2를 사용합니다. 그러나 보안 통신 중에 협상된 특정 TLS 버전을 확인하는 것이 중요합니다. 방법은 다음과 같습니다.
방법 1: 리플렉션 사용
이 기술에는 리플렉션을 사용하여 GetRequestStream()
또는 GetResponseStream()
반환된 스트림의 내부 TlsStream
속성에 액세스하는 작업이 포함됩니다. TlsStream
클래스는 SslState
속성에 대한 액세스를 제공하는 SslProtocol
속성을 노출합니다.
<code class="language-csharp">using System.IO.Compression; using System.Net; using System.Reflection; using System.Security.Authentication; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(decodedUri); using (Stream requestStream = request.GetRequestStream()) { SslProtocols sslProtocol = ExtractSslProtocol(requestStream); // 检查SSL版本,如有必要采取适当的措施 } private SslProtocols ExtractSslProtocol(Stream stream) { BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; Stream metaStream = stream; // 处理GZip或Deflate流 if (stream is GZipStream) metaStream = (stream as GZipStream).BaseStream; else if (stream is DeflateStream) metaStream = (stream as DeflateStream).BaseStream; var tlsStream = metaStream.GetType().GetProperty("Connection", bindingFlags).GetValue(metaStream); if (!(bool)tlsStream.GetType().GetProperty("UsingSecureStream", bindingFlags).GetValue(tlsStream)) return SslProtocols.None; var tlsState = tlsStream.GetType().GetField("m_Worker", bindingFlags).GetValue(tlsStream); return (SslProtocols)tlsState.GetType().GetProperty("SslProtocol", bindingFlags).GetValue(tlsState); }</code>
방법 2: TcpClient 사용
또는 TcpClient
클래스를 사용하여 TCP 연결을 설정할 수 있습니다. TcpClient
은 SslStream
에 대한 액세스도 제공하므로 협상된 TLS 버전을 확인할 수 있습니다. 이 방법은 HTTP 요청을 시작하기 전에 TLS 버전을 확인해야 하는 경우 유용합니다.
<code class="language-csharp">TlsInfo tlsInfo = null; IPHostEntry dnsHost = await Dns.GetHostEntryAsync(HostURI.Host); using (TcpClient client = new TcpClient(dnsHost.HostName, 443)) { using (SslStream sslStream = new SslStream(client.GetStream(), false, TlsValidationCallback, null)) { sslstream.AuthenticateAsClient(dnsHost.HostName, null, (SslProtocols)ServicePointManager.SecurityProtocol, false); tlsInfo = new TlsInfo(sslStream); } } public class TlsInfo { public TlsInfo(SslStream secStream) { this.ProtocolVersion = secStream.SslProtocol; } public SslProtocols ProtocolVersion { get; set; } }</code>
두 가지 방법 모두 보안 HTTP 통신 중에 협상된 TLS 버전을 확인하는 방법을 제공하므로 보안 요구 사항에 따라 현명한 결정을 내릴 수 있습니다.
위 내용은 .NET Framework에서 협상된 TLS 버전을 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!