성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<span> <br /> <div class='mainCenterTitle'>8.1 WCF에 SSL 적용 (1) - Httpcfg.exe 도구를 이용한 SSL 설정</div><br /> <br /> WCF의 HTTP 기능은 http.sys와 통합되어졌다고 합니다. 내부적으로 어떤 메카니즘으로 통합이 이루어져 있는지는 아직 제가 공부가 덜 되어서 파고 들어본 적은 없지만 ^^; 암튼 문서상으로만 그렇다고 알고 있습니다. 혹시 이 부분에 대해 심도 있게 알고 계신 분이 있다면 블로그 토픽으로 좀 써주시면 링크하도록 하겠습니다.<br /> <br /> 그런 이유로 인해, WCF의 Endpoint로 SSL 적용을 하고 싶다면 http.sys에게 관련 설정값을 알려줘야 합니다. 실제로 <a target='_blank' href='/2/0/372'>"18.2. 웹 사이트에 SSL을 적용"</a> 토픽을 보시면 아시겠지만, IIS 관리자에서도 SSL 통신을 설정하는 부분에 있어서는 "인증서"와 "SSL 적용 포트"를 알려주도록 되어 있습니다. "WWW 서비스"도 결국 http.sys를 이용하는 하나의 클라이언트라고도 볼 수 있는데요.<br /> <br /> WWW 서비스는 IIS 관리자를 통해서 "포트"와 "인증서"를 설정하는 것이 가능하지만, WCF와 같은 외부 프로그램들이 특정 포트에 대해서 사용하려는 인증서를 매핑하고 싶다면 어찌해야 할까요? 나아가서 IIS에 SSL 웹 사이트 설정을 사용자 관여 없이 자동으로 셋업 과정 등에서 하고 싶다면 어찌해야 할까요? 그렇습니다. 바로 이런 경우를 위해서 httpcfg.exe 도구가 있는 것입니다. 참고로 Vista / Longhorn 같은 경우에는 이러한 설정을 명령행에서 할 수 있도록 "netsh"이 확장되었습니다. <br /> <br /> Windows XP/2003에서 httpcfg.exe를 사용하기 위해서는 "Windows Support Tools"를 다운로드 받으면 됩니다. 그 안에 "httpcfg.exe" 프로그램이 포함되어 있기 때문입니다. "Windows Support Tools"는 다음의 경로에서 무료로 다운로드 받을 수 있습니다.<br /> <br /> Windows Server 2003 Service Pack 1 32-bit Support Tools<br /> ; <a target='_blank' href='http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en'>http://www.microsoft.com/downloads/details.aspx?familyid=6EC50B78-8BE1-4E81-B3BE-4E7AC4F0912D&displaylang=en</a><br /> <br /> Windows XP Service Pack 2 Support Tools <br /> ; <a target='_blank' href='http://www.microsoft.com/downloads/details.aspx?FamilyId=49AE8576-9BB9-4126-9761-BA8011FABF38&displaylang=en'>http://www.microsoft.com/downloads/details.aspx?FamilyId=49AE8576-9BB9-4126-9761-BA8011FABF38&displaylang=en</a><br /> <br /> 구체적인 HttpCfg.exe에 대한 도움말은 다음의 사이트를 참조하십시오.<br /> <br /> Httpcfg.exe: HTTP Configuration Utility<br /> ; <a target='_blank' href='http://technet2.microsoft.com/WindowsServer/en/library/e17527d2-105a-451f-8e3f-d515479527011033.mspx'>http://technet2.microsoft.com/WindowsServer/en/library/e17527d2-105a-451f-8e3f-d515479527011033.mspx</a><br /> <br /> 원한다면 HttpCfg.exe에 대한 C/C++ 소스 파일도 구할 수 있습니다. 혹시나, 다음의 토픽을 읽어보신 분은 해당 STS 예제 다운로드 파일 안에 "httpcfg.exe"가 소스와 함께 공개되어 있다는 것을 아실 것입니다. <br /> <br /> 11.3.2 Managed Card 발행에 대한 Microsoft 예제 실습 (2) - STS 구현 <br /> ; <a target='_blank' href='/2/0/385'>http://www.sysnet.pe.kr/2/0/385</a><br /> <br /> <hr /> <br /> 자, 그럼 이제 httpcfg.exe 파일을 구했으니 여러분들이 서비스 하기를 원하는 포트에 대해서 인증서를 매핑하기 위해 실제로 httpcfg.exe를 사용해서 실습을 해보도록 하겠습니다.<br /> <br /> <a name="cert_to_port"></a> <span class='subLastTitle'>[포트에 대해 인증서 설정]</span><br /> <br /> 1. 명령어 형식은 다음과 같습니다.<br /> <br /> <pre class='code'> httpcfg set ssl -i [바인딩 IP]:[포트번호] -h [인증서Thumbprint값] </pre> <br /> 대개의 경우 바인딩될 IP는 IIS 관리자에서 하듯이 모든 IP에 대해서 가능하도록 하기 위해 "All unsigned"라는 의미로 "0.0.0.0" 값을 쓰게 될 것입니다. 포트 번호는 여러분들이 원하는 값을 넣으면 될 테고요. 문제는 "인증서 Thumbprint값"입니다.<br /> <br /> 결국, 이번 토픽도 이렇게 해서 "인증서 서비스"와 관련이 있게 됩니다. 계속해서 실습을 하기 위해서는 아래의 토픽을 읽어보시고 '인증서 서비스'와 '서버 인증서'를 받아두셔야 합니다.<br /> <br /> <pre class='code'> 18.1 윈도우즈 인증서 서비스 설치 ; <a target='_blank' href='/2/0/354'>http://www.sysnet.pe.kr/2/0/354</a> 18.2. 웹 사이트에 SSL을 적용 ; <a target='_blank' href='/2/0/372'>http://www.sysnet.pe.kr/2/0/372</a> </pre> <br /> 2. 위와 같이 해서 "서버 인증서"를 구하셨으면 이제 해당 서버 인증서의 "등록 정보" 창을 열어 봅니다. 그럼, 아래와 같은 화면이 나오게 되는데, 보시는 것처럼 "Thumbprint" 값이 설정되어져 있는 것을 알 수 있습니다.<br /> <br /> <img alt='Thumbprint 값 확인' src='/SysWebRes/bbs/wcf_how_to_use_ssl_1.png' /><br /> <br /> 참고로, WCF에서 위의 "Thumbprint" 값을 사용하기 위해서는 반드시 "Thumbprint alogorithm" 값이 "sha1"이어야 한다고 합니다. 만약 "MD5"가 사용되었다면... ^^; 일단 한번 해보시고 안되면 다시 받으십시오.<br /> <br /> 위의 그림에서 "Thumbprint" 값을 조합해 보면 "0a8a131bb6dbbfc46e6c1022921512a60b0ea005"가 되겠습니다. 이제 모든 준비는 끝났습니다. 만약 여러분들이 서비스할 WCF 서버 응용 프로그램이 사용할 포트가 "9094"라면 다음과 같이 실행하실 수 있습니다.<br /> <br /> <pre class='code'> httpcfg set ssl -i 0.0.0.0:9094 -h 0a8a131bb6dbbfc46e6c1022921512a60b0ea005 </pre> <br /> <hr style='width: 50%' /><br /> <br /> <span class='subLastTitle'>[설치된 인증서 확인]</span><br /> <br /> "httpcfg set ssl" 명령을 통해서 실제로 인증서가 정상적으로 설치되었는지 확인하기 위해서는 "httpcfg query ssl" 명령을 사용하시면 됩니다. 실제로 다음과 같이 나오는 것을 확인할 수 있습니다.<br /> <br /> <pre class='code'> D:\...>httpcfg query ssl IP : 0.0.0.0:443 Hash : a8a131bb6dbbfc46e6c1022921512a6 b ea0 5 Guid : {4dc3e181-e14b-4a21-b022-59fc669b0914} CertStoreName : MY CertCheckMode : 0 RevocationFreshnessTime : 0 UrlRetrievalTimeout : 0 SslCtlIdentifier : SslCtlStoreName : Flags : 0 ------------------------------------------------------------------------------ <b>IP : 0.0.0.0:9094 Hash : a8a131bb6dbbfc46e6c1022921512a6 b ea0 5 Guid : {00000000-0000-0000-0000-000000000000} CertStoreName : (null) CertCheckMode : 0 RevocationFreshnessTime : 0 UrlRetrievalTimeout : 0 SslCtlIdentifier : (null) SslCtlStoreName : (null) Flags : 0</b> ------------------------------------------------------------------------------ </pre> <br /> <hr style='width: 50%' /><br /> <br /> <span class='subLastTitle'>[설치된 인증서 삭제]</span><br /> <br /> 굳이 이 정도까지는 설명드리지 않아도 이미 "httpcfg.exe" 실행을 통해서 나오는 도움말에 대해서 대강 숙지를 하셨을 텐데요. 그래도 한번 설명을 드려보자면, 다음과 같은 명령을 통해서 인증서 설정을 삭제할 수 있습니다.<br /> <br /> <pre class='code'> D:\...>httpcfg delete ssl -i 0.0.0.0:9094 HttpDeleteServiceConfiguration completed with 0. D:\...>httpcfg query ssl IP : 0.0.0.0:443 Hash : a8a131bb6dbbfc46e6c1022921512a6 b ea0 5 Guid : {4dc3e181-e14b-4a21-b022-59fc669b0914} CertStoreName : MY CertCheckMode : 0 RevocationFreshnessTime : 0 UrlRetrievalTimeout : 0 SslCtlIdentifier : SslCtlStoreName : Flags : 0 ------------------------------------------------------------------------------ </pre> <br /> <hr /> <br /> 마지막으로, 만약 여러분들이 httpcfg.exe를 통해서 정상적으로 SSL 인증서를 설정하지 않은 체로 WCF와 같은 서비스에서 HTTPS 통신을 하려고 하면 클라이언트 측에서 다음과 같은 오류가 발생하게 됩니다.<br /> <br /> <pre class='code'> Unhandled Exception: System.ServiceModel.CommunicationException: An error occurred while making the HTTP request to https://sedona:9094/HelloService. <b>This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case.</b> This could also be caused by a mismatch of the security binding between the client and the server. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream. at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) [이하 생략...] --- End of inner exception stack trace --- at System.Net.HttpWebRequest.GetResponse() at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) --- End of inner exception stack trace --- Server stack trace: at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason) [이하 생략...] Press any key to continue . . . </pre> <br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </span>
첨부파일
스팸 방지용 인증 번호
1186
(왼쪽의 숫자를 입력해야 합니다.)