2010-04-16 61 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