如何在WCF客户端中接受自签名SSL证书?

时间:2011-02-12 08:55:10

标签: wpf wcf iis-7 ssl-certificate

这可能是一个愚蠢的问题,但我找不到答案。

我想做什么: 我有一个由IIS托管的WCF服务。它工作得很好,我可以访问wsdl,我有一个服务器的自签名证书等。我想从WPF客户端调用这个服务。

问题是,由于我有自签名证书,因此在调用服务时出现以下异常: 无法与权限为“localhost”的SSL / TLS安全通道建立信任关系。

如果我从浏览器访问该站点(或服务),则没有问题,因为浏览器会向我发出关于证书的警告,并且让我可以选择查看该页面。但是WPF客户端只是抛出异常。

我不想完全关闭身份验证过程,我只想让用户选择忽略此警告(就像浏览器一样)。

任何人都可以为此提供一些代码吗?如果你遇到一个关于这个的好的,详细的教程,它也会很棒。 (看,我发现的问题是我发现的缺乏细节)

2 个答案:

答案 0 :(得分:14)

这是使WCF客户端接受任意证书所需的最少代码量。这是 不安全 。仅用于测试。如果这个代码发狂并吃掉你的小猫,请不要怪我。

ServicePointManager.ServerCertificateValidationCallback +=
            new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck);

回电:

bool EasyCertCheck(object sender, X509Certificate cert,
        X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
    return true;
}

代码无耻地从对Is it possible to force the WCF test client to accept a self-signed certificate?

的最有帮助的答案中解脱出来

答案 1 :(得分:5)

您可以自行注册证书。如果在客户端中加载证书,然后将其注册为可信任,则不应该收到该警告。

您需要找到X509CertificateCollection并将证书添加到该集合。我遇到了一个在Ssl上运行SmtpClient的问题。

挂钩System.Net.ServicePointManager.ServerCertificateValidationCallback或实施System.Net.ICertificatePolicy并将我自己安装的证书标识为有效/可信(附于System.Net.ServicePointManager.CertificatePolicy)。

这本身不是WCF的东西,但据我所知,这也应该转换为WCF。这一切都取决于WCF在引擎盖下的用途。