程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF分布式開發常見錯誤(23)

WCF分布式開發常見錯誤(23)

編輯:關於.NET

WCF分布式開發常見錯誤(23):This could be due to the fact that the server certificate is not configured properly with HTTP.SYS

當使用Transport安全模式,WSHTTPBingding, 客戶端認證類型為 Windows:clientCredentialType="Windows" .

安裝了證書,也添加了客戶端服務引用。啟動服務宿主,客戶端也添加了賬 號。結果就出錯了。

信息如下:

An error occurred while making the HTTP request to https://localhost:9001/WCFService. This could be due to the fact that the server certificate is not configured properly with HTTP.SYS in the HTTPS case. This could also be caused by a mismatch of the security binding between the client and the server.

可能是由於服務器證書在HTTPS 箱子裡與HTTP.SYS 設置不匹配。也可以由於 客戶端和服務端之間的綁定不一致導致。

問題發到WCF中英文論壇,一個WCF英文論壇版主Richard,給了提示。他自己 的一個連接。我看了一下。有點收獲。

WCF中文論壇問題地址:http://social.microsoft.com/Forums/zh- CN/wcfzhchs/thread/5ca6ee28-76cb-4395-82ea-21160cd4ebb0

WCF英文論壇問題地址:http://social.microsoft.com/Forums/en- US/wcf/thread/c39ce206-a86b-4faf-a427-8d4e4684758c

【1】錯誤信息截圖:

【2】問題原因:

導致此問題的原因可能是:

(1)證書沒有設置,transport安全模式,需要建立SSL安全套接層或者TLS 傳輸層安全協議。服務器要提供證書。

(2)WCF終結點地址沒有設置證書,這裡要建立SSL需要對中節點地址設置證 書。

【3】解決辦法:

(1)制作證書:這裡直接使用makecert 工具。Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示行裡輸入 :

makecert -r -pe -n "CN=FrankWCFServer" -ss My -sky exchange

具體大家可以看文章WSE3.0構建Web服務安全(2):非對稱加密、公鑰、密鑰、 證書、簽名的區別和聯系以及X.509 證書的獲得和管理,詳細的介紹。具體的參 數說明:詳細幫助文檔:

(2)設置服務證書:

<behavior name="WCFService.WCFServiceBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<serviceCertificate  x509FindType="FindBySubjectName"  findValue="WCFHTTPS" storeLocation="CurrentUser"/>
</serviceCredentials>
</behavior>

(3)為服務終結點地址注冊SSL證書:

現在證書還不可用,需要為使用的端口注冊證書。這裡需要設置工具, Windows Server 2003 或 Windows XP,則使用 HttpCfg.exe 工具。Windows Server 2003 中已安裝該工具。下載該工 具/Files/frank_xl/HttpcfgFrankXuLei.rar。

如果運行的是 Windows Vista,則使用已安裝的 Netsh.exe 工具。在 Windows\System32目錄下。

【4】SSL證書設置過程:

要查出證書指紋的值,在浏覽器--內容--證書裡,選擇你創建的證書-詳細信 息--微縮圖(thumbprint其實是指紋的意思)把這個值拷貝出來,中間的空格可 以再文本編輯器裡替換掉。這裡WCFHTTPS的是 0307d727a369378d077809cf0ed617eec90a0e2f。

【4.1】查詢SSL證書設置:

(1)在 Windows Server 2003 或 Windows XP 中,通過 query 和 ssl 開 關使用 HttpCfg.exe 工具查看當前端口配置,在命令窗口切換到HttpCfg在文件 目錄,你如下面代碼:

httpcfg query ssl

(2)Vista:

netsh http show sslcert

【4.2】設置SSL證書:

(1)在 Windows Server 2003 或 Windows XP:

httpcfg set ssl -i 0.0.0.0:9001-h 0307d727a369378d077809cf0ed617eec90a0e2f

(2)Vista:

netsh http add sslcert ipport=0.0.0.0:9001 certhash=0307d727a369378d077809cf0ed617eec90a0e2f appid={111111111- 2222-3333-4444-qqqqqqqqqqqqq} 。最後一個GUID.你可以隨便編寫一個。使用 工具也可以。certhash 參數指定證書的指紋。ipport 參數指定 IP 地址和端口 ,功能類似於前述 Httpcfg.exe 工具的 -i 開關。appid 參數為可用於標識所 屬應用程序的 GUID。

【4.3】刪除SSL證書:

(1)Windows Server 2003 和 Windows XP 中:

httpcfg delete ssl -i 0.0.0.0:9001-h 0307d727a369378d077809cf0ed617eec90a0e2f

(2)Vista:

Netsh http delete sslcert ipport=0.0.0.0:9001

【5】總結:

配置完成以後,就可以啟動托管宿主了。SSL證書配置相對復雜。在實現傳輸 安全的是時候需要設置證書到特定的端口。很多代碼都沒給出提示。這個需要注 意。大部分文章之給出理論,實際對問題解決參考不大,代碼實際開發需要自己 實踐。我在解決這個問題的時候,嘗試了很多方式。結果結果就是不對,快包崩 潰的時候,試驗成功了。這個就是最開心的。

運行宿主結果如下:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved