2010-04-16 26 views
7

我試圖移植現有的WCF客戶端應用程序在Mono下的Linux上運行。現在我正在測試所有的東西,找出在單聲道上有什麼作用,哪些沒有。WCF單聲道 - 與SSL的BasicHttpBinding

客戶端通過basicHttpBinding進行超級簡單調用。它工作的很好,直到我啓用SSL(即在綁定中指定BasicHttpSecurityMode.Transport)。

  • 運行在Windows .NET中,它的偉大工程
  • 運行在Mono在Ubuntu 9.10 /單聲道2.6我得到以下錯誤:

Exception in async operation: System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a

我讀過Mono security FAQ;但是服務器上的SSL證書來自Equifax安全證書頒發機構頒發的根CA(購買的證書)。我在Ubuntu安裝上針對.svc URL運行了TlsTest工具,並且沒有問題/錯誤。另外,我可以在Firefox中使用罰款(沒有安全警告)。

我錯過了什麼?

回答

2

來自Mono的TlsTest文件非常擅長檢查這個問題,所以即使詢問它也似乎有點愚蠢 - 但是:您可以使用WebClient向.svc文件發出請求並獲得響應嗎?如果不是,由於某種原因,證書可能還存在問題。

我也猜你已經使用mozroots或certmgr工具來驗證根CA在那裏?通過certmgr將您的網站上的證書明確添加到商店怎麼樣?

還有一個提示:certmgr工具通常在當前用戶的證書副本上工作,您需要指定--machine arg,以便所有用戶都可以獲得證書。

+0

感謝您的回答! 我使用簡單的WebRequest進行測試,結果相同。不過,我認爲我現在看到了這個問題 - 我已經將Mono 2.6與Ubuntu 9.10附帶的Mono 2.4軟件包並排安裝。我不得不這樣做,因爲我的WCF HTTPS調用總是會在2.4上失敗(我從HttpsTransportBindingElement獲得一個NotImplementedException)。 我做了一個簡單的測試應用程序,使一個簡單的WebRequest。當我在2.6中運行時,它會因無效證書失敗。當我在2.4中運行它時,它工作正常!所以顯然我的證書是不可見的單聲道2.6 ..... – TheNextman 2010-04-19 14:20:02

0

我找到了一些竅門,以消除錯誤:

using System.Security.Cryptography.X509Certificates; 

public class HttpWebRequestClientCertificateTest : ICertificatePolicy { 



    public bool CheckValidationResult (ServicePoint sp, X509Certificate certificate, 

     WebRequest request, int error) 

     { 

      return true; 

     } 

    } 

..... 

ServicePointManager.CertificatePolicy = new HttpWebRequestClientCertificateTest(); 

HttpWebRequest request = ... 

也許它會爲其他人在單聲道2.6這個bug工作。

+3

是的,這個工程,並消除了錯誤,但它不能解決問題。你不應該真的在生產代碼中使用這個... – TheNextman 2011-01-31 19:28:26