닷넷관련/ASP.NET MVC 🍕
ASP.NET MVC 및 WEB API 에서 TLS 1.2 강제 실행 방법 (기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. )
재우니
2022. 8. 5. 13:34
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 메소드 안에 아래 코드를 기술하면 됩니다.
❤️ 또는 AWS 관련 API 사용 중일 때 오류 발생할 경우에도 아래 처럼 적용하면 됩니다.
Amazon.S3.AmazonS3Exception:
'Amazon S3 will stop supporting TLS 1.0 and TLS 1.1 connections.
Please update your client to use TLS version 1.2 or above.
To learn more and to update your client, see https://go.aws/3AUlVSb.
For further assistance, contact AWS support.'
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
참고자료
https://codeshare.co.uk/blog/how-to-force-a-net-website-to-use-tls-12/
https://stackoverflow.com/a/28333370