Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在WCF客户端中接受自签名SSL证书?_Wpf_Wcf_Iis 7_Ssl Certificate - Fatal编程技术网

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

Wpf 如何在WCF客户端中接受自签名SSL证书?,wpf,wcf,iis-7,ssl-certificate,Wpf,Wcf,Iis 7,Ssl Certificate,这可能是个愚蠢的问题,但我就是找不到答案 我想做的是: 我有一个由IIS托管的WCF服务。它工作得很好,我可以访问wsdl,我有一个服务器的自签名证书等。我想从WPF客户端调用此服务 问题是,由于我有一个自签名证书,因此在调用服务时出现以下异常: 无法为具有权限“localhost”的SSL/TLS安全通道建立信任关系 如果我从浏览器访问站点(或服务),这是没有问题的,因为浏览器会警告我有关证书的信息,并允许我选择是否查看页面。但是WPF客户端只是抛出一个异常 我不想完全关闭身份验证过程,我只想

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

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

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

如果我从浏览器访问站点(或服务),这是没有问题的,因为浏览器会警告我有关证书的信息,并允许我选择是否查看页面。但是WPF客户端只是抛出一个异常

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


有人能提供一些代码吗?如果你遇到一个关于这个的好的,详细的教程,它也会很棒。(请参阅,我发现教程中的问题是缺少详细信息)

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

您需要找到X509CertificateCollection并将证书添加到该集合中。我在通过Ssl运行SmtpClient时遇到了这种问题

通过挂接
System.Net.ServicePointManager.ServerCertificateValidationCallback
或实现
System.Net.ICertificatePolicy
并将我自己安装的证书标识为有效/受信任的证书(附加到
System.Net.ServicePointManager.CertificatePolicy


这不是WCF本身的东西,但从我所能说的,这应该转化为WCF以及。这完全取决于WCF在幕后的用途。

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

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

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

代码无耻地从对

最没有帮助的答案中删除。我更改了问题,以反映不属于默认受信任根证书的自签名证书的问题。请指定在何处编写这些内容?什么类应该实现接口等?我是WCF的新手,我从未使用过安全连接或IIS,所以我还是有点迷茫……如果你钩住
System.Net.ServicePointManager.ServerCertificateValidationCallback
,你会收到验证证书的请求吗?一种非代码方法是信任你的开发机器和测试环境上的证书。正如这里所解释的,语言的完美运用:)