WCF 自签名证书在客户端上不受信任
Posted
技术标签:
【中文标题】WCF 自签名证书在客户端上不受信任【英文标题】:WCF Self signed certificate is not trusted on the client 【发布时间】:2012-07-03 00:14:37 【问题描述】:我有一个只在两台服务器机器之间使用的 WCF 服务。它永远不会被公开使用。
我希望我可以将 SSL 与自签名证书一起使用以确保安全。
我使用 IIS7 创建了一个证书,然后使用 IE 和 MMC(Personal、TrustedRoot、Third-Party & TrustedPeople)将其安装在客户端计算机上。
如果不质疑证书,我仍然无法通过代码或通过 IE8 访问该服务。
我从 IE 得到通常的“此网站的安全证书有问题。”
从代码中我得到错误:“无法为具有权限的 SSL/TLS 安全通道建立信任关系”
为什么这不起作用?
【问题讨论】:
【参考方案1】:您确定您的自签名证书位于将访问您的 WCF 服务的客户端计算机上的受信任的根证书颁发机构证书存储中吗?请参阅下面我的一台 Windows Vista 计算机信任的自签名证书的屏幕截图。
您是否还确定您的证书是自签名证书。请参阅我的一个自签名证书末尾的屏幕截图。
更新信息:
查看this 发布的信息,了解如何使用名为 SelfSSL7 的实用程序创建包含多个主机名的自签名证书。
这是另一个link,其中包含有关 SelfSSL7.exe 和下载信息的详细信息。
【讨论】:
证书“CN”中包含的主机名是否与您的 https:// URL 上使用的主机名匹配?您可以转储或列出您创建的证书吗?减去私钥,我们不需要看到。 对于@HeatfanJohn 的评论,证书中的主机名必须与您在客户端的服务端点中输入的内容完全匹配——也就是说,它必须是完全限定的域名AD 域。过去,当我只在客户端上使用服务器机器名称而证书是使用全名颁发时,我遇到了问题。 这一半解决了这个问题......如果我在本地托管服务和客户端,当 FQDN 被键入浏览器时,它可以在 IE 中工作。但是,从代码实现服务时,我得到了同样的错误。 FQDN 在端点中。 这意味着问题是证书中的主机名 (CN=xxx) 与用于连接服务器的主机名不匹配。如果您要在连接到您的服务时使用服务器的完全限定名称,那么您需要在构建自签名证书时使用该名称。还有一个称为主题备用名称 (SAN) 的证书工具,您可以在其中指定访问证书时可以使用的其他主机名。我需要 GOOGLE 自签名 SAN 证书和 Windows,看看你是如何在 Windows 上做到这一点的。 @Heatfan 还有通配符。当您是自己的 CA 时,您可以使用通常很昂贵的花哨功能。【参考方案2】:我今天有这个 - 但使用 IIS7。如果您使用 IIS 生成证书(inetmgr-> 选择主节点,然后选择服务器证书,使用右侧菜单选项创建自认证证书。“颁发给”属性使用您机器的 FQDN 设置 - 比如“ mymachine.myintranet.copp.net' 或其他任何东西。
只要您为从服务连接的 url 提供 FQDN - 例如“mymachine.myintranet.copp.net/myservice/service.svc”,就会出现错误。
如果您使用的是替代 URL,例如 IP 地址或 localhost,则会发生错误。因此,上面的机器显然在他的网络中被称为 johnma,然后它就可以工作了。
【讨论】:
【参考方案3】:它不起作用的原因是 IE 检测到证书不是从有效的 CA(证书颁发机构)创建的。自签名证书比其他任何东西都更适合测试。如果您没有收到有关 SSL 的警告,那么它就没有多大意义。
【讨论】:
我虽然在客户端机器上安装证书应该可以解决这个问题,不是吗? @erix 信任证书应该会使警告消失。 对我来说,在根目录下安装证书同时满足IE和Chrome,但WCF还是不喜欢以上是关于WCF 自签名证书在客户端上不受信任的主要内容,如果未能解决你的问题,请参考以下文章