2013-07-01 4 views
2

Windows 콘솔 응용 프로그램 내에서 자체 호스팅되는 WCF DataService를 개발 중입니다. HTTP 대신 Https (예 : SSL)를 통해 내 서비스를 활성화하고 싶습니다. 어떻게해야합니까? Windows에서 CA 인증서 (비주얼 스튜디오 명령 프롬프트 사용) 만들기WCF DataService over Https

감사

답변

1

첫째 :

makecert -sv SignRoot.pvk -cy authority -r signroot.cer -a sha1 -n "CN=Dev Certification Authority" -ss my -sr localmachine 

지금 Windows 키 스토어에서 "신뢰할 수있는 루트 인증 기관"에 인증서를 넣어. 그것은 MMC를 통해 할 수 있습니다. 그것을 실행하려면 : 실행 -> "mmc"-> 입력 -> "인증서"콘솔 -> 개인 저장소에서 생성 된 인증서를 찾아 신뢰할 수있는 인증 기관 저장소로 이동합니다.

makecert -iv SignRoot.pvk -ic signroot.cer -cy end -pe -n CN="localhost" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 

참고 :

이제 우리는 CA 인증서 서명 한 교환 인증서 만드는 EKU OID는 서버 인증입니다
참고 다음 CN (일반 이름) 서비스가 호출 될 이름과 동일해야합니다.

이제 데이터 서비스에 Https 끝점을 추가합니다. 그 중 하나가 우리가 서비스 엔드 포인트를 입력해야하는 서비스의 의 web.config 파일을 통해
1가 될 수 있습니다

2 또는 프로그래밍 방식으로 엔드 포인트를 추가 "를 사용하여와

<endpoint address="https://localhost:8888/" binding="basicHttpsBinding" contract="System.Data.Services.IRequestHandler"></endpoint> 
DataServiceHost 개체의 AddServiceEndpoint "

host.AddServiceEndpoint(
       new ServiceEndpoint(ContractDescription.GetContract(typeof(TestODataService.DemoDataService))) 
       { 
        Address = new EndpointAddress("https://localhost:8888/"), 
        Binding = new WebHttpBinding(WebHttpSecurityMode.Transport), 
        Contract = ContractDescription.GetContract(typeof(IRequestHandler)), 
       } 
       ); 

참고 : 다음은 두 번째 방법 바인딩은 반드시 전송 보안으로 WebHttpBinding된다. web.config 메서드에서는 basicHttpsBinding 또는 전송 보안을 사용하는 bindingConfiguration이있는 webBinding이 될 수 있습니다.

이제 Exchange 인증서를 서비스 포트와 바인딩합니다. WCF 웹 서버가 교환 인증서로 클라이언트에 응답하려면 netsh 명령을 사용하여 인증서 주소를 서비스에 바인딩해야합니다. netsh http add sslcert ipport = 0.0.0.0 : 8000 certhash = 0000000000003ed9cd0c315bbb6dc1c08da5e6 appid = {00112233-4455-6677-8899-AABBCCDDEEFF}

참고는 다음 certhash는 교환 인증서의 지문이고, APPID는 의 AssemblyInfo.cs에있는 호스팅 응용 프로그램의 GUID입니다 프로젝트의 ip 0.0.0.0은 모든 IP 주소에 바인드되며 포트는 서비스의 포트입니다. 이 명령은 각 주소에 대해 한 번만 사용해야합니다.

참고 : 교환기 인증서의 CN이 서비스의 IP 주소로 설정된 경우에도 일부 모바일 장치는 서비스의 IP 주소를 사용하여 호출 할 때 서비스의 ID를 확인할 수 없습니다. 이 경우 인증서의 CN은 도메인 이름이어야합니다.

참고는 : 서비스의 교환 인증서를 신뢰하는 모바일 장치에 대한 위해, CA 인증서는 신뢰할 수있는 CA 인증서 저장소에 모바일에 설치해야합니다.

참고 : 일부 브라우저 (예 : Chrome)는 로컬 네트워크에서만 사용되는 이름 인 localhost에 대해 인증서가 발급되는 것을 거부합니다. CN을 도메인 이름으로 설정하면 이런 일이 발생하지 않습니다.

참조 : http://www.codeproject.com/Articles/24027/SSL-with-Self-hosted-WCF-Service