2008-10-13 90 views
3

我有一個自我託管的服務,我想要將傳輸安全性添加到。 我已經將WSHttpBinding.SecurityMode設置爲Transport並將ClientCredentialType設置爲HttpClientCredentialType.None。 我已經創建了一個證書並將它設置爲我的主機 ServiceHost.Credentials.ServiceCertificate.SetCertificate() 我也使用 註冊了它netsh http add sslcert ipport = 127.0.0.1:80 certhash = [MyCertHash] certstorename =我的appid = [TheGuidOfTheAppTahtRunsTheService] verifyclientcertrevocation =禁用帶有傳輸安全性的WCF自託管服務(鑑權失敗,因爲遠程方已關閉傳輸流)。

我得到每當我試圖調用服務下面的錯誤信息:「驗證失敗,因爲遠程方已關閉傳輸流」

這是否意味着客戶端和服務器嘗試彼此進行身份驗證?我該如何禁用它? 爲了清楚起見,我不想在客戶端安裝證書,我不尋找任何認證atm,只是保護消息內容,如果這甚至是可能的。

+0

將記錄添加到WCF服務器,並使用Vista SDK中的服務跟蹤查看器查看確切的錯誤! 不要忽略錯誤出現在代碼中的可能性。 – sajidnizami 2008-10-13 12:46:36

+0

該服務工作正常,沒有運輸安全。 – 2008-10-13 13:19:27

回答

2

此MSDN post可能有助於解決您的問題。這篇文章中的初始請求是配置與您的安全模式不同的安全模式,但他們切換到傳輸模式進行故障排除,該信息應適用於您的情況。

如果您描述的是您安裝證書所做的所有工作,那麼您缺少一些步驟。該文章概述了安裝有效證書的過程。祝你好運!!

2

證書可以在屁股有時工作的痛苦。你應該總是與WCF做的第一件事就是打開跟蹤:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

然後,您可以使用SVCTraceViewer來查看您的服務產生幕後的異常,並得到了一點洞察發生了什麼,這是許多WCF問題必須解決的問題。 10次​​中的9次,痕跡會告訴你你需要知道的一切。

此外,請確保客戶端和服務器都配置了證書,因爲證書需要安裝在兩臺機器上。

2

我試圖追查這個相同的錯誤,並遇到這篇文章。 WCF跟蹤不起作用,因爲錯誤出現在HTTP堆棧中的客戶端上,並且在服務器端,請求在它到達WCF層之前被拒絕。

我發現我不夠徹底。確保滿足以下所有條件。我有一些,但不是所有的這些設置正確:

  1. 服務器的證書頒發者有一個有效的和匹配發出同一臺機器上 受信任的根CA。

  2. 服務器證書的主題名稱的機器名 完全匹配,和機器名客戶端訪問比賽,以及(「本地主機」與服務器的Environment.MachineName值)

  3. 服務器證書的指紋 一直通過使用以下命令管理員 設置(使用 netsh等效新版本的Windows)

    httpcfg set ssl -i 0.0.0.0:{port} -h {thumbprint} 
    
  4. 此客戶端在客戶端計算機上也具有相同的有效頒發根CA證書。

這裏有一個很好的參考:SSL with Self-hosted WCF Service

相關問題