首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么WCF会抱怨身份验证失败?

为什么WCF会抱怨身份验证失败?
EN

Stack Overflow用户
提问于 2009-10-27 17:47:01
回答 3查看 29.2K关注 0票数 20

我正在创建一个WCF应用程序,其中我将使用证书来加密客户端和服务器之间的通信。在我的开发环境中,我想使用使用makecert创建的测试证书/自签名证书。(只有服务器有证书,客户端没有)。

我已经将证书安装到证书存储中,一切正常。在客户端,certificateValidationMode当前设置为"false",因为我使用的是测试证书。

我的问题是:

在客户机上的app.config中,我需要将标识元素指定为:

<endpoint ... >
   <identity>
      <dns value="<Name-Of-Server-Computer>"/>
   </identity>
</endpoint>

如果删除identity元素,则在尝试连接到服务器时,客户端中会出现以下错误消息:

传出邮件的

身份检查失败。远程终结点的DNS标识应为'localhost‘,但远程终结点提供了DNS声明'Name- of -Server-Computer’。如果这是合法的远程终结点,则可以通过在创建通道代理时将DNS标识“”服务器计算机名称“”显式指定为EndpointAddress的标识属性来解决此问题。“”

所以我的问题是:

  • 是否仅在使用测试/自签名证书时执行身份检查?当我使用从CA购买的真实的、受信任的证书部署我的应用程序时,是否仍会进行身份检查?
  • 是否有方法禁用身份检查?我知道我可以创建自己的自定义证书验证器,但似乎没有办法使用这些来覆盖身份检查。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-27 19:38:14

检查一直都在进行--而且应该这样做。基本上,WCF将检查证书是否颁发给您的服务所在的域名(yourcompany.com)或机器名。这是一个我永远不会禁用的安全检查!否则,任何欺骗你的服务的人都可以使用任意域名/机器名的任何证书来获取你的流量--而不是你想要的!

因此,您需要确保生产服务器上的实际证书确实颁发给生产服务器所属的域名,例如,如果您的生产服务器将位于"production.yourcompany.com“中,则需要将证书颁发给该域。

Marc

票数 11
EN

Stack Overflow用户

发布于 2011-11-22 20:34:45

这个问题的答案在错误消息本身中。在客户端上,您可以执行以下操作:

EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity("Server");
EndpointAddress address = new EndpointAddress(new Uri("net.tcp://1.2.3.4:12345/ServiceName"), identity);

将“服务器”替换为所需的任何内容。通常,这是您的自签名证书的通用名称(CN)。这样做不会破坏安全性,只要您承担所有责任来确保提供的证书是有效的,即创建您的自定义证书验证器并在那里进行相关检查。

票数 32
EN

Stack Overflow用户

发布于 2012-12-03 23:40:39

certificateValidationMode应该设置为"None",而不是"false"...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1629715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档