我已經成功地使用針對本地主機發布的自簽名證書獲取WCF傳輸安全性,用於登錄Web服務。我將自簽名證書添加爲受信任的根證書頒發機構,以防止IE呻吟不信任的證書。在對本地主機進行測試時,一切正常,因爲我們使用的是本地主機,它還允許所有開發人員從他們自己的機器上測試服務而不會有任何問題。從遠程計算機測試Silverlight應用程序的WCF傳輸安全性
但是,我現在試圖讓我們的遠程測試服務器上工作。在遠程服務器上運行時,本地主機證書顯然不再起作用。所以我使用IIS7爲服務器機器創建了一個自簽名測試證書,並設置IIS將該證書用於網站上的https通信。我也將其添加到服務器的信任根證書頒發機構存儲中。然後,我改變WCFserver行爲的配置到現在不找本地主機證書了,但找到一個綁在機器的DNS名稱如下圖所示:
<behavior name="SSL">
<serviceCredentials>
<serviceCertificate
findValue="prods-build.mydomain.co.za"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName" />
</serviceCredentials>
</behavior>
這種行爲是再聯繫到登錄服務在web.config文件:
<service behaviorConfiguration="SSL" name="Pragma.OnKey.Services.Common.LogonService">
<endpoint address="" bindingConfiguration="pragmaSSL" binding="basicHttpBinding" name="Silverlight" contract="Pragma.OnKey.Services.Common.ILogonService" />
</service>
爲了參考我還包括使用的綁定配置:
<binding name="pragmaSSL">
<security mode="Transport"/>
</binding>
當我使用服務器機器本身的完全限定的域名從瀏覽器運行測試時,everyting可以正常工作。 Fiddler顯示正在進行登錄Web服務調用的HTTPS連接。但是,只要我嘗試使用來自遠程計算機的完全限定域名運行相同的測試,就會收到通常的「嘗試向URI發出請求的錯誤https://myserver/Services/Logon.svc ..檢查clientaccesspolicy.xml」錯誤。 clientaccesspolicy.xml(見下文)位於網站的根文件夾中,請記住,這一切都正常工作直到我嘗試使用完全限定的DNS名稱遠程訪問服務。
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPACTION">
<domain uri="http://*"/>
<domain uri="https://*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
所以我的問題是,我做錯了什麼?我錯過了什麼?如何使用自簽名測試證書和Silverlight客戶端來測試遠程計算機上的SSL實現?
記住所有這些工作正常使用自簽名證書是針對localhost。然而,我需要在我們的測試和分段環境中測試我們的應用程序。
感謝 卡雷爾
謝謝埃裏克,那是我錯過的作品。我還發現防火牆阻止了傳入連接,所以我不得不在機器上打開端口443。再次感謝。 – Carel 2009-09-02 07:15:58