具有证书身份验证的WCF自托管服务
我创建了一个具有基本http身份验证的自托管WCF RESTful服务,该服务使用自签名SSL证书在https上运行。一切正常。当用户通过web浏览器访问服务操作时,会出现一个弹出窗口,询问凭据(登录/密码) 现在我想做证书身份验证,而不是基本的,但它不起作用。客户端浏览器(IE/chrome/firefox)从不提示选择证书,我总是收到HTTP 403错误,当我在自定义证书validor中设置断点时,它永远不会命中。所以我肯定错过了一些东西。我尝试使用Fiddler进行调试,它确认请求中没有身份验证头 这是我的代码来主持服务具有证书身份验证的WCF自托管服务,wcf,rest,authentication,certificate,Wcf,Rest,Authentication,Certificate,我创建了一个具有基本http身份验证的自托管WCF RESTful服务,该服务使用自签名SSL证书在https上运行。一切正常。当用户通过web浏览器访问服务操作时,会出现一个弹出窗口,询问凭据(登录/密码) 现在我想做证书身份验证,而不是基本的,但它不起作用。客户端浏览器(IE/chrome/firefox)从不提示选择证书,我总是收到HTTP 403错误,当我在自定义证书validor中设置断点时,它永远不会命中。所以我肯定错过了一些东西。我尝试使用Fiddler进行调试,它确认请求中没有身
Uri baseAdress = new Uri("https://localhost:8446/");
WebServiceHost host = new WebServiceHost(typeof(RestService));
WebHttpBinding wb = new WebHttpBinding();
wb.Security.Mode = WebHttpSecurityMode.Transport;
wb.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
host.AddServiceEndpoint(typeof(IRestService), wb, baseAdress);
host.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
X509CertificateValidationMode.Custom;
host.Credentials.ClientCertificate.Authentication.CustomCertificateValidator =
new MyX509CertificateValidator()
host.Open();
谢谢你的提示。我发现这篇文章可能会对你有所帮助: 它讨论了向netsh注册证书的某种方式 另外,请确保您的证书颁发给localhost(因为您调用的url中的域部分应该与颁发给的证书相同)。谢谢您的输入。 我发现了问题所在 当我使用makecert工具为ssl端口绑定创建自签名证书时,我添加了“-eku”密钥,该密钥使证书用于服务器身份验证。我在没有该选项的情况下重新创建了另一个,因此它可以用于所有目的 此外,我还确保我的证书位于当前用户的个人存储中。 之后,当客户端输入我的服务的url时,会弹出一个窗口,要求他们选择一个证书,这就是我创建的证书
对于那些面临相同问题的人,这可能很有用。您是否也更新了客户端配置?所有客户端请求都是在web浏览器(WebGet)中完成的,而不是在代码中完成的,因此我不知道要更新什么。我会尝试SvTraceViewer,并构建自己的asp页面进行测试。该链接已断开