WCF错误:“X.509证书CN =本地主机链build设失败…”

我试图让我的WCF客户端和服务器互相通话时出现此错误。

X.509证书CN = localhost链式构build失败。 使用的证书具有无法validation的信任链。 replace证书或更改certificateValidationMode。 证书链已处理,但终止于不受信任信任的根证书。

如果我closuresSSL证书,一切正常。

你的证书存在问题(我想你使用的是自签名证书)WCF试图validation所有的发行者链和期望,最终链将终止于根可信任的权威。 要禁用该检查,您可以将这样的行添加到app.config分支。 但是这个“拐杖”不应该用于生产serviceBehaviors/behavior/serviceCredentials/clientCertificate

 <authentication certificateValidationMode =“PeerOrChainTrust”revocationMode =“NoCheck”/>

我通过在我的代码中closuresvalidation来修复问题,如下所示:

 client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None; 

client是我的服务参考的一个实例。

正确的做法是设置您自己的开发/testing可信根证书 ,并用此签名您的客户端和服务证书。

在开发/testing环境中绕过链式信任可能“起作用”,但是您的开发/testing环境现在configuration与生产不同,这不是一个好主意,因为您可能会发现一些testing会产生误报或漏报。

我在这个同样的问题上遇到了一些困难。 我正在使用WIF SDK中的CustomToken-VS2010示例。

该示例没有app.config,我觉得知道代码如何工作是有用的,所以我花了一些时间来研究这个。 我觉得我应该在这里展示我的结果。 我希望这个信息是有帮助的。

我遇到过同样的问题。 我遇到的问题是“我在哪里设置这个模式?” 我很难find这个属性设置的对象,这实际上是正确的对象。 我终于发现它是ChannelFactory的一部分:

 using System.ServiceModel.Security; : ChannelFactory<IEcho> echoChannelFactory = new ChannelFactory<IEcho>(...) echoChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 

所以,设置这个地方是在ChannelFactory对象中。

以本地pipe理员身份运行Visual Studio 2010,我能够获取样本(在运行与所有样本关联的batch file以创build证书之后等)

再一次, 这不是在生产环境中要做的事情 ,但知道如何设置服务证书authentication模式可能是一个很好的总体了解。

在您的客户端应用程序中添加terminal行为(例如:App.config)并设置您在terminal中添加的行为configuration。

  <behaviors> <endpointBehaviors> <behavior name="certificateEndpointBehavior"> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="None" revocationMode="NoCheck"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <endpoint address="http://localhost/Invoice.svc" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding_ACKS" contract="Invoice" name="Invoice" behaviorConfiguration="certificateEndpointBehavior" > </endpoint> 

(以为我会分享这个以防万一有人在那里)我遇到了这个问题,同时在WIF上运行一个Web应用程序。 我解决了我的问题,将我正在从“证书/个人/证书”文件夹中使用的x.509证书的副本移动到证书存储区内的“受信任的根证书颁发机构/证书”文件夹。 您可以通过运行Microsoftpipe理控制台来完成此操作

继上面Aseiu的评论之后,我发现当服务器中的可信存储缺less证书时,上面的确切的错误将被输出。 在研究这个问题时,我还发现,通过查看Windows下的事件查看器,日志/应用程序将包含一个错误,详细说明它遇到问题的证书。 您还可以将活动日志与服务的SVC日志中的条目相关联。