Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF错误:";X.509证书CN=localhost链构建失败…“;_Wcf_Ssl Certificate - Fatal编程技术网

WCF错误:";X.509证书CN=localhost链构建失败…“;

WCF错误:";X.509证书CN=localhost链构建失败…“;,wcf,ssl-certificate,Wcf,Ssl Certificate,我在尝试使我的WCF客户端和服务器相互通信时遇到此错误 X.509证书CN=localhost链生成失败。这个 使用的证书具有无法验证的信任链。 更换证书或更改certificateValidationMode。A. 已处理证书链,但在根证书中终止 不受信任的 如果我关闭SSL证书,一切都会正常工作。您的证书有问题(我想您使用的是自签名证书)。WCF尝试验证所有颁发者链,并期望最终链将在根受信任机构上结束。要禁用该检查,可以将该行添加到app.config分支。但是这个“拐杖”不应该用于生产服务

我在尝试使我的WCF客户端和服务器相互通信时遇到此错误

X.509证书CN=localhost链生成失败。这个 使用的证书具有无法验证的信任链。 更换证书或更改certificateValidationMode。A. 已处理证书链,但在根证书中终止 不受信任的


如果我关闭SSL证书,一切都会正常工作。

您的证书有问题(我想您使用的是自签名证书)。WCF尝试验证所有颁发者链,并期望最终链将在根受信任机构上结束。要禁用该检查,可以将该行添加到app.config分支。但是这个“拐杖”不应该用于生产
服务行为/behavior/serviceCredentials/clientCertificate

<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" />
我通过如下方式关闭代码中的验证来修复此问题:

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

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

我在同样的问题上遇到了一些困难。我使用的是WIFSDK中的CustomToken-VS2010示例

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

我也有同样的问题。我遇到的问题是“我在哪里设置此模式?”我很难找到具有此属性的对象,该属性实际上是正确的对象。我最终发现它是频道工厂的一部分:

using System.ServiceModel.Security;
:
ChannelFactory<IEcho> echoChannelFactory = new ChannelFactory<IEcho>(...)
echoChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
使用System.ServiceModel.Security;
:
ChannelFactory echoChannelFactory=新的ChannelFactory(…)
echoChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode=X509CertificateValidationMode.None;
所以,设置这个的位置是在ChannelFactory对象中

以本地管理员的身份运行VisualStudio2010,我能够使示例正常工作(在运行与所有示例关联的批处理文件以创建证书等之后)


同样,这不是您在生产环境中要做的事情,但是总体上了解如何设置服务证书身份验证模式可能是一件非常好的事情。

正确的做法是使用它对客户端和服务证书进行签名


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

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

 <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证书的副本从“Certificates/personal/Certificates”文件夹移动到证书存储中的“Trusted Root certificate Authorities/Certificates”文件夹,修复了我的问题。您可以通过运行microsoft管理控制台来实现这一点。

根据上述Aseiu的评论,我发现当服务器中的受信任存储丢失证书时,将输出与上述完全相同的错误。在研究该问题时,我还发现,通过查看Windows日志/应用程序下的事件查看器,将包含一个错误,详细说明它遇到问题的证书。您还可以将活动日志与服务的SVC日志中的条目相关联。

当停用revocationMode帮助时,您很可能缺少根CA的客户端吊销列表

makecert -crl -n "CN=CARoot" -r -sv CARoot.pvk CARoot.crl

这也需要导入到受信任的根证书颁发机构。另请参见。

太好了,它现在工作得很好。你说得对,我使用的是自签名证书。修复此错误的另一个关键技巧是使用Microsoft服务配置编辑器在app.config中将“NegotiateServiceCredential”切换为“false”。请原谅我的无知-这一行应该放在客户端还是服务器端?app.config的哪个部分?@Shaul部分是serviceBehaviors/behavior/serviceCredentials/clientCertificate,您应该将其添加到服务器的app.config中。这对我没有任何帮助。我也有同样的问题。添加了配置值,但没有更改任何内容。我解决了在客户端配置文件(app.config)上添加端点行为的问题,并在serverCertificate上将CertificateValidationMode设置为None。别忘了在端点主配置上引用端点行为,以便考虑其行为。这对我也起到了作用,更改web.config却没有。请注意,这永远不会进入您的生产环境!必须将引用“System.IdentityModel”添加到客户端项目以使其编译X509CertificateValidationMode枚举位于System.IdentityModel程序集中。这是令人困惑的,因为X509ServiceCertificateAuthentication类似乎位于System.ServiceModel.dll中。是否使用
ChannelFactory.Credentials
ClientBase.ClientCredentials
取决于是否显式使用通道工厂(使用动态代理)或者由某些代码生成器创建的生成的代理(例如,通过VS-GUI添加服务引用)。这是正确的解决方案。您甚至不需要担心设置“certificateValidationMode”。只需要撤销模式。在服务器端设置值不起作用。黑客攻击每个客户端