WCF Mono - 使用SSL的BasicHttpBinding

时间:2010-04-16 21:36:17

标签: .net wcf mono

我正在尝试将现有的WCF客户端应用程序移植到Mono下的Linux上运行。现在我正在测试所有内容,弄清楚Mono上有什么作用,什么没有。

客户端通过basicHttpBinding进行超级简单的调用。它工作得很好,直到我启用SSL(即在绑定中指定BasicHttpSecurityMode.Transport)。

  • 在Windows上运行.NET,效果很好
  • 在Ubuntu 9.10 / Mono 2.6上运行Mono我收到以下错误:
  

异步操作中的异常:System.Net.WebException:获取响应流时出错(写入:身份验证或解密失败。):SendFailure ---> System.IO.IOException:身份验证或解密失败。 ---> Mono.Security.Protocol.Tls.TlsException:从服务器收到的证书无效。错误代码:0xffffffff800b010a

我读过Mono security FAQ;但是,服务器上的SSL证书来自根CA(购买的证书) - 由Equifax安全证书颁发机构颁发。我在针对.svc URL的Ubuntu安装上运行了TlsTest工具,没有任何问题/错误。我也可以在Firefox中使用该服务(没有安全警告)。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

Mono的TlsTest文件非常擅长检查这个,所以看起来似乎有点傻 - 但是:你能使用WebClient向.svc文件发出请求并得到回复吗?如果没有,由于某种原因,证书可能仍然存在问题。

我也猜测你使用了mozroots或certmgr工具来验证根CA是否存在?如何通过certmgr将您网站上的证书明确添加到商店?

还有一个提醒:certmgr工具通常用于当前用户的证书副本,您需要指定--machine arg,以便所有用户都获得证书。

答案 1 :(得分: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 = ...

也许它适用于在Mono 2.6中存在该错误的其他人。