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日志中的条目相关联。
- 我怎样才能为localhost创build一个自签名的证书?
- 有可能有IP地址的SSL证书,而不是域名?
- 如何告诉Maven忽略SSL错误(并相信所有的证书)?
- 如何解决“java.security.cert.CertificateException:没有主题替代名称”错误?
- Java:sun.security.provider.certpath.SunCertPathBuilderException:找不到要求的目标的有效证书path
- 导入证书后出现Java Keytool错误,“keytool error:java.io.FileNotFoundException&Access Denied”
- 用SSL代理
- 在使用npm时收到错误:'错误:SSL错误:SELF_SIGNED_CERT_IN_CHAIN'
- 没有有效的SSL证书,HTTPS连接是否安全?