System.Net.WebException:远程服务器返回错误:(403)Forbidden

问题描述 投票:0回答:1

我有一个WCF服务,需要使用证书进行客户端身份验证。

我有一个简单的控制台应用程序,使用此WCF。

我有2个客户端证书,第一个控制台应用程序工作正常,第二个,它返回此错误:

System.ServiceModel.Security.MessageSecurityException: The HTTP request was forbidden with client authentication scheme 'Anonymous'. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

正如我在IIS日志中看到的那样,是403.7。

两个证书都安装在同一个商店中,并且两个证书在执行de控制台应用程序的用户的管理私钥中具有相同的权限。

两个证书都有:

  • 私钥
  • 主要用途:数字签名,不可否认性,密钥加密,数据加密(f0)
  • 增强的密钥用法:客户端身份验证(1.3.6.1.5.5.7.3.2)
  • 有效且具有相同的认证路径

有任何想法吗?

UPDATE

如果我激活SCHANNEL日志记录,当我使用失败的证书时,在事件查看器上我们会看到以下错误:

**enter image description here**

解决了

问题是我们使用以下方式获取证书:

X509FindType.FindBySubjectName

对于我们正在使用的主题,至少还有另外3个包含该主题的证书。

然后我们获得的证书不正确,我们更改要使用的代码

X509FindType.FindBySubjectDistinguishedName或X509FindType.FindByThumbprint

现在获得正确的客户证书和工作。

c# wcf ssl
1个回答
0
投票

这取决于服务器证书验证模式。 enter image description here例如,当我们使用CertificationValidationMode = Custom时,我们可以指定实现的自定义X509validator类

System.IdentityModel.Selectors.X509CertificateValidator

它可以在处理客户端证书时进行自定义验证。 如果CertificateionValidationMode = ChainTrust,则必须确保客户端存储在正确的存储区域中,并且与服务器证书位于同一链中。什么是服务器证书验证模式? 如果有任何我可以帮助的话,请随时与我联系。

© www.soinside.com 2019 - 2024. All rights reserved.