我试图调试传入请求的问题,但从未附加过客户端证书。
我相当肯定该请求有一个客户端证书,我有一个针对两个可能的端点(一个是我们的,一个在第三方服务上)运行的测试代码,运行公共代码将证书附加到请求并且SSL协商对第三方服务工作正常。
我在IISExpress(VS2010)以及IIS 8上遇到了同样的问题。
证书已在两台计算机上安装并受信任。
我已尝试过这里的步骤:http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api没有运气。
我在自定义ActionFilter中尝试了这两种方式来访问证书
var cert = HttpContext.Current.Request.ClientCertificate;
var certificate = actionContext.Request.GetClientCertificate();
是否可能是ActionFilter与DelegatingHandler的上下文导致问题?
答案 0 :(得分:0)
您的客户端代码是什么样的?您是否将客户端证书附加到WebRequestHandler
?
如果你使用ActionFilter和DelegatingHanlder并不重要,但我建议使用DelegatingHandler
,因为它发生在创建控制器上下文之前,并且性能更高(将更早地拒绝未经授权的请求)
答案 1 :(得分:0)
获得证书的位置无关紧要。确保证书位于正确的位置,尤其是CA颁发者证书。这应该位于本地计算机的受信任CA文件夹中。您可以使用OpenSSL对此进行故障排除,并查看证书是否导致问题。
一个非常常见的问题是在握手过程中,服务器会发送一个受信任的CA列表,但是有一个限制,所以如果你有很多可信任的CA,其中一些会被截断。因此,客户端永远不会发送证书。您可以尝试清除“受信任的权限”文件夹,但请确保不删除任何必需的重要CA.另一种方法是在注册表编辑器中添加一个条目,使其不允许服务器发送可信CA的列表。 You can read more here
此外,如果您使用的是IIS,则无需使用自托管。