- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 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。
这两个证书都安装在同一存储区,并且在执行控制台应用程序的用户的管理私钥中具有相同的权限。
两个证书都有:
有什么想法吗?
更新
如果我激活 SCHANNEL 日志记录,当我使用失败的证书时,我们会在事件查看器上看到此错误:
已解决
问题是我们使用以下方式获取证书:
X509FindType.FindBySubjectName
对于我们正在使用的主题,至少还有另外 3 个包含该主题的证书。
那么我们拿到的证书不对,我们改代码使用
X509FindType.FindBySubjectDistinguishedName或者X509FindType.FindByThumbprint
现在获得正确的客户端证书并开始工作。
最佳答案
这取决于服务器证书验证模式。 例如,当我们使用 CertificationValidationMode=Custom 时,我们可以指定实现
System.IdentityModel.Selectors.X509CertificateValidator
它可以在处理客户端证书时进行自定义验证。
如果CertificateionValidationMode=ChainTrust,您必须确保客户端存储在正确的存储区域,并且与服务器证书在同一个链中。什么是服务器证书验证模式?
如果有什么我可以帮忙的,请随时与我联系。
关于c# - 系统.Net.WebException : The remote server returned an error: (403) Forbidden,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55101812/
我是一名优秀的程序员,十分优秀!