재우니의 블로그

이태원 참사에 대한 깊은 애도를 표합니다. 티스토리측에서도 공지했듯 이태원 참사 관련으로 콘텐츠를 생산하는분이 없기를 바랍니다.

반응형

ASP.NET MVC 및 WEB API 에서 TLS 1.2 강제 실행 방법

 

 

 

- 필수 최소사양 : .Net Framework 4.5 이상 (TLS 기본값 아님)

- 권장사양 : .Net Framwork 4.6 이상 (TLS 1.2 기본값 지원)

 

위의 사양에 맞지 않으면 web api 발송 시 아래와 같은 오류가 발생될 수도 있습니다.

System.Net.WebException: 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. ---> 
System.IO.IOException: 예기치 않은 패킷 형식으로 인해 핸드셰이크가 실패했습니다.

 

ASP.NET MVC 및 WEB API 설정하기

TLS 1.2 를 강제 실행하려면, 사이트의 루트에서 global.asax 파일을 찾아 마우스 오른쪽 단추로 클릭하고 코드 열어서 Application_Start 메소드 안에 아래 코드를 기술하면 됩니다.

 

namespace YourApplication
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //**Add these lines**
            if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false)
            {
                ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12;
            }
            //**Add these lines**

            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

 

오류 발생할 경우

요청이 중단되었습니다. SSL/TLS 보안 채널을 만들 수 없습니다.

System.Net.WebException: 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. ---> System.IO.IOException: 예기치 않은 패킷 형식으로 인해 핸드셰이크가 실패했습니다.

 

만약에 전부 열어서 테스트 하고자 할 경우, 아래 처럼 프로토콜을 아래와 같이 지정 가능합니다. 

 

"SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;"

 

최종 소스를 보시면... 

protected void Application_Start()
{
    //필수 최소 : .Net Framework 4.5 이상 (TLS 기본값 아님) / 권장 : .Net Framwork 4.6 이상 (TLS 1.2 기본값 지원)
    ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
}

 

 

SSL/TLS 참고 사이트

 

 

SSL/TLS 에 대한 설명은 아래 블로그를 참고하시면 되겠습니다.

 

http://www.itworld.co.kr/tags/52416/SSL/113007

 

SSL/TLS의 이해와 TLS 1.3으로 업그레이드해야 하는 이유

웹 초창기부터, SSL(Secure Sockets Layer) 프로토콜과 그 후예인 TLS(Transport Layer Security)는 암호화와 보안을 제공해 인터넷 상거래를 가능하게 만들었다. SSL, TLS와 같은 프로토콜은 점점 더 정교해져 가�

www.itworld.co.kr


 

참고자료

 

https://codeshare.co.uk/blog/how-to-force-a-net-website-to-use-tls-12/

 

How to force a .NET website to use TLS 1.2

This post shows you how you can force your .NET website to run using TLS 1.2

codeshare.co.uk

 

https://stackoverflow.com/a/28333370

 

Default SecurityProtocol in .NET 4.5

What is the default security protocol for communicating with servers that support up to TLS 1.2? Will .NET by default, choose the highest security protocol supported on the server side or do I have...

stackoverflow.com

 

https://her0116.tistory.com/entry/C-WebClient-Exception-SSLTLS-%EB%B3%B4%EC%95%88-%EC%B1%84%EB%84%90%EC%9D%84-%EB%A7%8C%EB%93%A4-%EC%88%98-%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4

 

C# WebClient Exception - SSL/TLS 보안 채널을 만들 수 없습니다.

C# - WebClient - SSL/TLS 보안 채널을 만들수 없습니다. 에러 처리 방법 원인 : .Net Framework 가 버전이 낮아, TLS 최신을 지원하지 않아 발생함. 사이트가 TLS 1.1 이나 TLS 1.2 지원일 경우 발생 처리 : 필..

her0116.tistory.com

 

반응형

댓글

비밀글모드