C#WebApi传入客户端证书始终为null

时间:2014-04-14 15:45:43

标签: c# asp.net c#-4.0 ssl asp.net-web-api

我试图调试传入请求的问题,但从未附加过客户端证书。

我相当肯定该请求有一个客户端证书,我有一个针对两个可能的端点(一个是我们的,一个在第三方服务上)运行的测试代码,运行公共代码将证书附加到请求并且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的上下文导致问题?

2 个答案:

答案 0 :(得分:0)

您的客户端代码是什么样的?您是否将客户端证书附加到WebRequestHandler

如果你使用ActionFilter和DelegatingHanlder并不重要,但我建议使用DelegatingHandler,因为它发生在创建控制器上下文之前,并且性能更高(将更早地拒绝未经授权的请求)

答案 1 :(得分:0)

获得证书的位置无关紧要。确保证书位于正确的位置,尤其是CA颁发者证书。这应该位于本地计算机的受信任CA文件夹中。您可以使用OpenSSL对此进行故障排除,并查看证书是否导致问题。

一个非常常见的问题是在握手过程中,服务器会发送一个受信任的CA列表,但是有一个限制,所以如果你有很多可信任的CA,其中一些会被截断。因此,客户端永远不会发送证书。您可以尝试清除“受信任的权限”文件夹,但请确保不删除任何必需的重要CA.另一种方法是在注册表编辑器中添加一个条目,使其不允许服务器发送可信CA的列表。 You can read more here

此外,如果您使用的是IIS,则无需使用自托管。