Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有证书身份验证的WCF自托管服务_Wcf_Rest_Authentication_Certificate - Fatal编程技术网

具有证书身份验证的WCF自托管服务

具有证书身份验证的WCF自托管服务,wcf,rest,authentication,certificate,Wcf,Rest,Authentication,Certificate,我创建了一个具有基本http身份验证的自托管WCF RESTful服务,该服务使用自签名SSL证书在https上运行。一切正常。当用户通过web浏览器访问服务操作时,会出现一个弹出窗口,询问凭据(登录/密码) 现在我想做证书身份验证,而不是基本的,但它不起作用。客户端浏览器(IE/chrome/firefox)从不提示选择证书,我总是收到HTTP 403错误,当我在自定义证书validor中设置断点时,它永远不会命中。所以我肯定错过了一些东西。我尝试使用Fiddler进行调试,它确认请求中没有身

我创建了一个具有基本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页面进行测试。该链接已断开