繁体   English   中英

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

[英]System.Net.WebException: The remote server returned an error: (403) Forbidden

我有一个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)
  • 有效且具有相同的认证路径

有任何想法吗?

UPDATE

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

**在此处输入图片说明**

解决了

问题在于我们使用以下方法获取证书:

X509FindType.FindBySubjectName

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

那么我们得到的证书是不正确的,我们更改代码以使用

X509FindType.FindBySubjectDistinguishedName或X509FindType.FindByThumbprint

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

这取决于服务器证书验证模式。 在此输入图像描述 例如,当我们使用CertificationValidationMode = Custom时 ,我们可以指定自定义X509validator类,该类实现

System.IdentityModel.Selectors.X509CertificateValidator

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM