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