2011-04-21 5 views
4

하나의 ServiceHost 내의 다른 끝점에서 BasicHttpBinding과 NetTcpBinding을 모두 사용하는 WCF 서비스가 있습니다.자체 서명 된 인증서로 전송 보안을 사용하는 BasicHttpBinding

서버 :

var ServiceHost host = new ServiceHost(blah blah); 
host.Credentials.ServiceCertificate.Certificate = GetCertificate(); //load a certificate from file 
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
var httpBinding = new BasicHttpBinding(); 
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport; 
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 

클라이언트 : NetTcp 모두 내가 사실은 BasicHttpBinding의 사용을 만들기 위해 노력하고 잘 전까지이었다, 그래서 내가 할, 파일에서로드되는 자체 서명 된 인증서를 사용

ChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
var cer = GetCertificate(); 
ChannelFactory.Credentials.ClientCertificate.Certificate = cer; 

var httpBinding = new BasicHttpBinding(); 
httpBinding.Security.Mode = BasicHttpSecurityMode.Transport; 
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
//accept any cert 
System.Net.ServicePointManager.ServerCertificateValidationCallback = 
       ((sender, certificate, chain, sslPolicyErrors) => true); 

그러나 커넥트, 나는

는 예외이 오류 왔을 때 - 오류가동안 발생했습니다HTTP 요청을 https://localhost/MyService으로 변경하십시오. 이 은 서버 인증서가 HTTPS 경우에 HTTP.SYS와 제대로 구성되어 있지 않기 때문일 수 있습니다. 또한 클라이언트와 서버 간의 보안 바인딩 의 불일치로 인해 발생할 수 있습니다.

인증서가 설치되어 있지 않고 net tcp 바인딩에서 제대로 작동 했으므로 뭔가 작게 놓쳤을 것 같습니까?

내가 아는 한 가지는 net.tcp가 이중 채널이며 기본 http가 심플 (simplex)이지만 설정에 차이가 있습니까? 예를 들어 net.tcp의 양쪽 끝에서 인증서를로드해야했는데 기본 http가 어떻게됩니까? HTTPS에 대한 사전

+0

브라우저에서 https URL을 탐색 해 보셨습니까? WCF 도움말 페이지가 표시됩니까? – Chandermani

+0

아니요, 내 인증서가 제대로 설정되지 않았지만 어디에서 찾을 수 없습니다 :( – Yuan

+0

비 IIS 호스팅을 사용하는 경우 http://www.codeproject.com/KB/WCF/WCFSSL.aspx를 확인하십시오. 인증서를 구성하지 않았을 수 있습니다. – Chandermani

답변

4

증명서

덕분에 WCF 구성에 구성되어 있지 않습니다. http.sys의 인증서를 구성해야합니다. 이를 수행하려면 승격 된 특권으로 명령 행에서 netsh.exe을 사용하십시오. IIS/WAS에서 서비스를 호스팅하는 경우 netsh를 사용할 필요가 없으며 configure HTTPS directly in IIS 일 수 있습니다.

+0

파일에서로드하는 이유는 실제로 파일이 메모리에있는 이유는 코드에서 구성한 것보다 "힘들"이며 내 서비스가 종료 될 때까지만 유효하기 때문에 명령 줄을 피하려고합니다. 포트 공유와 관련된 문제 – Yuan

+0

@ 원 : HTTPS는 http.sys에서 제공합니다 - 자체 요구 사항이있는 Windows 커널 드라이버입니다 .HTTP를 사용하려면 인증서 저장소에 인증서를 설치해야합니다 netsh로 등록하십시오. 응용 프로그램 설치 프로그램에서 사용자 지정 작업으로 할 수 있습니다. –

+0

http://msdn.microsoft.com/en-us/library/ms733791.aspx에서 모든 것, 아주 좋지 않은 것 같습니다. 설정하기 HTTP.SYS의 바인딩 및 설정 설정에 대한 인증서를 사용하면 많은 시간을 절약 할 수있었습니다! 감사합니다. – Yuan

관련 문제