-
[C#] - .NET Framework 3.5 TLS 1.2 적용하기.NET/CSharp 2020. 6. 15. 10:14
.NET Framework 3.5 TLS 1.2 적용하기
Chrome 브라우저에서 기존에 잘 되던 HTTPS API 서버에서 오류가 발생 하였다. HTTPS API 서버는 System.Net.Security.SslStream 클래스를 활용하여 개발하였다.
에러는 ERR_SSL_OBSOLETE_VERSION 이였고 해당 에러는 아래의 링크를 통하여 해결을 하였다.
https://blog.chromium.org/2019/10/chrome-ui-for-deprecating-legacy-tls.html
TLS 1.0 TLS 1.1를 사용하지 말고 TLS 1.2 로 업그레이드 해야 한다는 정보를 얻었다.
.NET Framework 3.5로 개발 중이기때문에 .NET Framework 3.5 에서 TLS 1.2를 사용할 수 있는 방법을 찾아야 했다.
https://stackoverflow.com/questions/43240611/net-framework-3-5-and-tls-1-2
다행히 위에 링크를 통하여 해결 할 수 있었다.
public class SslProtocolsExtensions { public const SslProtocols _Tls11 = (SslProtocols)0x00000300; public const SslProtocols _Tls12 = (SslProtocols)0x00000C00; public const SecurityProtocolType Tls11 = (SecurityProtocolType)_Tls11; public const SecurityProtocolType Tls12 = (SecurityProtocolType)_Tls12; public static void SetSecurityProtocol(SecurityProtocolType securityProtocolType) { ServicePointManager.SecurityProtocol = securityProtocolType; } }
기존에 HTTPS API 서버는 SslStream을 활용하여 사용하고 있었기 때문에 SslStream에 대한 생성 코드또한 변경 되었다.
먼저 프로그램이 실행 되었을 때 TLS 1.2에 대한 설정을 한다.
try { Trace.WriteLine("TLS12 설정을 시작합니다."); SslProtocolsExtensions.SetSecurityProtocol(SslProtocolsExtensions.Tls12); Trace.WriteLine("TLS12 설정을 완료 하였습니다."); } catch (Exception ex) { Trace.WriteLine(ex.Message); Trace.WriteLine(ex.StackTrace); }
try catch 문으로 감싸는 이유는 위에 링크를 통해(.NET Framework 3.5 and TLS 1.2) 확인 할 수 있다. 개발하고 있는 프로그램은 Windows 7 에서도 정상적으로 실행이 되어야 하기 때문이다.
Windows 7 SP1 에서 실행 될 경우 아래와 같은 에러 메시지를 볼 수 있다.
요청한 보안 프로토콜을 사용할 수 없습니다. 위치: System.Net.ServicePointManager.set_SecurityProtocol(SecurityProtocolType value)
이를 해결 하기 위해서는 해당 링크에서 제공하는 패키지를 다운받아 설치 하여야 한다.
마지막으로 SslStream 에 대한 코드를 수정하였다.
SslStream sslStream = new SslStream(new NetworkStream(socket, true), false, new RemoteCertificateValidationCallback(ServerCertPass)); sslStream.BeginAuthenticateAsServer(_certificate, true, SslProtocolsExtensions._Tls12, false, EndAuthenticate, state);
위에 링크가 없어졌을경우 테스트를 못하시는분들을 위해 미리 다운로드한 파일입니다.
'.NET > CSharp' 카테고리의 다른 글
[C#] - WinForm 디자인모드 사용방법 및 팁 (0) 2021.10.19 [C#] - Settings.Default.Save() 시 user.config 저장 위치 (0) 2020.11.02 [C#] - WinForm 특정 윈도우 Show, TopMost 처리 (0) 2019.10.07 [C#] - Working Directory (0) 2019.04.16 [C#] - WinForm PropertyGrid 에 표시되는 Enum 값 이름 변경하기 (0) 2018.12.25