2013-07-01 86 views
2

我正在開發一個WCF DataService,它是在Windows控制檯應用程序內自行託管的。我想通過Https(即SSL)而不是Http激活我的服務。我怎樣才能做到這一點?通過HTTPS的WCF DataService

感謝

回答

1

首先在Windows上創建CA證書(使用Visual Studio命令提示符):

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

現在把證書在Windows密鑰存儲 「受信任的根證書頒發機構」。這可以通過MMC完成。要做到這一點:運行... - >輸入「mmc」 - >輸入 - >選擇「證書」控制檯 - >在個人存儲中找到您創建的證書並將其移動到受信任的證書頒發機構存儲。

現在我們創建由CA證書簽署交換證書

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 

注意:該EKU OID是用於服務器身份驗證
注意:在CN(通用名)應該與服務將被調用的名稱相同。

現在我們爲數據服務添加一個Https端點。這可以是
1-通過的web.config文件服務,在此我們將不得不進入一個服務端點:

<endpoint address="https://localhost:8888/" binding="basicHttpsBinding" contract="System.Data.Services.IRequestHandler"></endpoint> 

2或與添加端點編程方式使用「 AddServiceEndpoint」的DataServiceHost對象的:

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,以實現傳輸安全性。

現在我們將交換證書綁定到服務的端口。爲了使WCF Web服務器使用交換證書響應客戶端,我們需要使用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地址,端口是服務的端口。每個地址只能使用該命令一次。

注意:當使用服務的IP地址進行呼叫時,即使交換證書將CN設置爲服務的IP地址,某些移動設備也可能無法驗證服務的身份。在這種情況下,證書的CN應該是域名。

注意:爲了使移動設備信任服務的交換證書,CA證書應安裝在受信任的CA證書存儲在移動。

注意:某些瀏覽器(例如Chrome)會反對爲本地主機頒發證書,這是本地網絡中僅使用的名稱。如果您將CN設置爲域名,則不會發生這種情況。

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