这可能是一个愚蠢的问题,但我找不到答案。
我想做什么: 我有一个由IIS托管的WCF服务。它工作得很好,我可以访问wsdl,我有一个服务器的自签名证书等。我想从WPF客户端调用这个服务。
问题是,由于我有自签名证书,因此在调用服务时出现以下异常: 无法与权限为“localhost”的SSL / TLS安全通道建立信任关系。
如果我从浏览器访问该站点(或服务),则没有问题,因为浏览器会向我发出关于证书的警告,并且让我可以选择查看该页面。但是WPF客户端只是抛出异常。
我不想完全关闭身份验证过程,我只想让用户选择忽略此警告(就像浏览器一样)。
任何人都可以为此提供一些代码吗?如果你遇到一个关于这个的好的,详细的教程,它也会很棒。 (看,我发现的问题是我发现的缺乏细节)
答案 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在引擎盖下的用途。