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

Con*_*ngo 38 wcf ssl-certificate

尝试让我的WCF客户端和服务器相互通信时,我收到此错误.

X.509证书CN = localhost链构建失败.使用的证书具有无法验证的信任链.替换证书或更改certificateValidationMode.已处理证书链,但终止于信任不信任的根证书.

如果我关闭SSL证书,一切都很完美.

Zan*_*ane 40

我通过在代码中关闭验证来修复问题,如下所示:

client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = 
System.ServiceModel.Security.X509CertificateValidationMode.None;
Run Code Online (Sandbox Code Playgroud)

client我的服务引用的实例在哪里.

  • 这对我来说也是一招,改变web.config没有.请注意,这绝不应该进入您的生产环境! (6认同)
  • 不得不向客户端项目添加引用"System.IdentityModel"以使其编译 (6认同)

The*_*est 33

您的证书存在问题(我假设您使用自签名证书)WCF尝试验证所有发布者链并期望最终链将以根受信任的权限结束.要禁用该检查,您可以将此行添加到app.config分支.但这种"拐杖"不应该用于生产serviceBehaviors/behavior/serviceCredentials/clientCertificate

<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" />

  • @Shaul部分是serviceBehaviors/behavior/serviceCredentials/clientCertificate你应该将它添加到服务器的app.config中 (4认同)
  • 这对我没什么用.我有相同的问题.添加了配置值,但没有改变任何内容. (3认同)
  • 很棒,它现在完美运作.你是对的,我使用的是自签名证书.解决此错误的另一个关键技巧是使用Microsoft服务配置编辑器在app.config中将"NegotiateServiceCredential"切换为"false". (2认同)
  • 请原谅我的无知 - 这条线应该放在客户端还是服务器端?在 app.config 的哪个部分? (2认同)

sai*_*lle 7

正确的做法是设置您自己的开发/测试受信任的根证书,并用此签署您的客户端和服务证书.

绕开您的开发/测试环境中的链信任可能"有效",但您的开发/测试环境现在配置与生产不同,这不是一个好主意,因为您可能会发现某些测试产生误报或漏报.