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

时间:2019-03-11 12:25:36

标签: c# wcf ssl

我有一个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。

这两个证书均安装在同一存储区中,并且对于执行控制台应用程序的用户在管理私钥中都具有相同的权限。

两个证书都具有:

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

有什么想法吗?

更新

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

**enter image description here**

已解决

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

X509FindType.FindBySubjectName

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

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

X509FindType.FindBySubjectDistinguishedName 要么 X509FindType.FindByThumbprint

现在可以获取正确的客户端证书并且可以使用。

1 个答案:

答案 0 :(得分:0)

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

的自定义X509validator类。
System.IdentityModel.Selectors.X509CertificateValidator

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