这可能是一个愚蠢的问题,但我就是找不到答案。
我想做什么:
我有一个由 IIS 托管的 WCF 服务。它运行良好,我可以访问 wsdl,我有服务器的自签名证书等。我想从 WPF 客户端调用此服务。
问题是,由于我有一个自签名证书,因此在调用服务时出现以下异常:
无法为具有“localhost”权限的 SSL/TLS 安全 channel 建立信任关系。
如果我从浏览器访问站点(或服务),则没有问题,因为浏览器会警告我有关证书的信息,并让我选择查看页面。但是 WPF 客户端只是抛出异常。
我不想完全关闭身份验证过程,我只想让用户可以选择忽略此警告(就像浏览器一样)。
任何人都可以为此提供一些代码吗?如果你遇到了一个很好的、详细的教程,那也太棒了。 (看,我发现的教程的问题是缺乏细节)
最佳答案
您可以自行注册证书。如果也在客户端加载证书,然后将其注册为受信任的,则不应收到该警告。
您需要找到 X509CertificateCollection 并将证书添加到该集合中。我在 Ssl 上运行 SmtpClient 时遇到了这种问题。
通过钩住 System.Net.ServicePointManager.ServerCertificateValidationCallback
或实现 System.Net.ICertificatePolicy
并将我自己安装的证书标识为有效/可信(附加到 System.Net.ServicePointManager.CertificatePolicy
)。
这本身不是 WCF 的东西,但据我所知,这也应该转化为 WCF。这完全取决于 WCF 在幕后使用的内容。
关于wpf - 如何在 WCF 客户端中接受自签名 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4977218/