성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - 웹 사이트가 어떤 버전의 TLS/SSL을 지원하는지 확인하는 방법</h1> <p> C# 코드로 다음과 같이 간단하게 확인할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.Net; internal class Program { static void Main(string[] args) { string url = "http://blog.rss.naver.com/"; foreach (SecurityProtocolType value in Enum.GetValues(typeof(SecurityProtocolType))) { if (value == SecurityProtocolType.SystemDefault) { continue; } CheckProtocol(url, value); } } private static void CheckProtocol(string url, SecurityProtocolType value) { ServicePointManager.SecurityProtocol = value; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); try { request.KeepAlive = false; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { if (response.StatusCode == HttpStatusCode.OK) { using (var stream = new StreamReader(response.GetResponseStream())) { stream.ReadToEnd(); } } Console.WriteLine($"{Enum.GetName(typeof(SecurityProtocolType), value)}({(int)value}): Supported"); } } catch (Exception ex) { Console.WriteLine($"{Enum.GetName(typeof(SecurityProtocolType), value)}({(int)value}): Not supported - {ex.Message}"); } } } </pre> <br /> 이 프로그램을 .NET Framework 4.x 환경에서 실행하면 다음과 같은 결과가 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // Windows 11 + .NET Framework 4.x Ssl3: Supported Tls: Supported Tls11: Supported Tls12: Supported Tls13: Supported </pre> <br /> 오호~~~ naver는 모든 프로토콜을 지원하는군요. ^^ 반면 <a target='tab' href='https://www.sysnet.pe.kr/0/0/547'>문제가 되었던 RSS를 노출하는 서버</a>로 테스트를 하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Ssl3: Not supported - The underlying connection was closed: An unexpected error occurred on a receive. Tls: Not supported - The request was aborted: Could not create SSL/TLS secure channel. Tls11: Not supported - The request was aborted: Could not create SSL/TLS secure channel. Tls12: Supported Tls13: Supported </pre> <br /> 보는 바와 같이 TLS 1.2 이상에 대해서만 지원하고 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 기타, 버전별 닷넷 런타임에서 위의 프로그램을 빌드하고 실행하면 이런 결과가 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // .NET Framework 3.5 이하 + 대상은 naver.com Ssl3: Supported Tls: Supported // .NET Core 2.0 환경에서 실행한 경우 + 대상은 naver.com Ssl3: Not supported - The requested security protocol is not supported. Tls: Supported Tls11: Supported Tls12: Supported // .NET Core 3.0 ~ .NET 7 + 대상은 naver.com Ssl3: Not supported - The requested security protocol is not supported. Tls: Supported Tls11: Supported Tls12: Supported Tls13: Supported </pre> <br /> 보는 바와 같이 .NET 3.5 이하의 경우 SecurityProtocolType 타입 자체가 Ssl3/Tls만 가지고 있습니다. 그렇긴 해도 이후의 버전에 대한 상수를 숫자 그대로 입력하면 동작하기 때문에 SSL/TLS 버전으로 인해 .NET 런타임을 고를 필요는 없습니다.<br /> <br /> .NET Core의 경우 <a target='tab' href='https://learn.microsoft.com/en-us/dotnet/api/system.net.securityprotocoltype'>SecurityProtocolType</a> 타입을 지원하는 최소 버전이 2.0이고, SSL 3.0은 아예 구현에서 제외를 시켰으며 3.0부터는 TLS 1.3 (기능이 아닌 상숫값) 지원을 추가한 정도로 정리가 됩니다.<br /> <br /> 마지막으로 openssl 프로그램에서도 위와 같은 보안 프로토콜을 테스트할 수 있는데요, 그에 대해서는 다음의 글이 도움이 될 것입니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 웹/리눅스 서버에서의 TLS / SSL 버전 확인 및 설정 방법 (SSL Labs) ; <a target='tab' href='https://iamfreeman.tistory.com/entry/서버에서의-TLS-SSL-버전-확인-방법'>https://iamfreeman.tistory.com/entry/서버에서의-TLS-SSL-버전-확인-방법</a> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1217
(왼쪽의 숫자를 입력해야 합니다.)