【问题标题】:Cannot authenticate a call to ASP.NET MVC3 service with a self-signed client certificate无法使用自签名客户端证书验证对 ASP.NET MVC3 服务的调用
【发布时间】:2016-10-14 08:37:29
【问题描述】:

我有一个在 IIS 7.5 和 .NET Framework 4.5 中运行的 ASP.NET MVC3 服务,我想通过客户端证书保护对其中一个子路径的访问。对于那个子路径,我制作了一个控制器,并带有一个特制的属性标记,该属性将访问请求客户端证书

public class CheckCertAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(
        ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Headers.Add(
            "CheckCertAttribute", "entered");
        var cert = filterContext.HttpContext.Request.ClientCertificate;
        // check the cert here, optionally return HTTP 403
    }
}

最初 OnActionExecuting() 正在被调用,但 Certificate 为空。原来我需要在 web.config 中启用SslNegotiateCert

<location path="PathOfInterest">
<system.webServer>
  <security>
    <access sslFlags="SslNegotiateCert"/>
  </security>
</system.webServer>
</location>

一旦我这样做了,客户端总是会收到 HTTP 403,并且不再调用该属性。

客户端证书是自签名的并导出为 .pfx(带有私钥)所以我猜问题是一旦它到达服务器端服务器不喜欢它并拒绝接受它并通过.客户端使用HttpWebRequest

var cert = new X509Certificate2(pathToPfx, password);
var request = (HttpWebRequest)WebRequest.Create("https://my.company.com/PathOfInterest");
request.ClientCertificates.Add(cert);
request.GetResponse();

我之前已经使用过这种方法并且很有效。第一种情况是客户端证书不是自签名的,而是由中间证书签名的,而中间证书又由一些受信任的根授权机构签名——在这种情况下,我的服务配置非常相似,可以很好地接收它。第二种情况是使用自签名客户端证书进行 Azure 管理服务调用,但在这种情况下,我不知道服务器端是如何配置的。

因此,我得出结论,证书的自签名性质使其“不起作用”。我已经做了一些额外的事情——也许在 web.config 中添加一些东西或将证书添加到服务器端的某个证书存储中。我只是不知道这应该是什么。

如何进行此设置?

【问题讨论】:

    标签: c# asp.net-mvc-3 ssl iis certificate


    【解决方案1】:

    IIS 尝试与客户端“协商”一个相互信任的连接,并且由于客户端证书是自签名的,它拒绝信任它。

    您的选择:

    1. 使用由知名证书颁发机构颁发的证书。这可行,但您必须每年左右重新颁发证书。
    2. 运行您自己的 CA 基础架构,将其根 CA 证书添加到服务机器的“受信任根”证书存储中,并颁发使用该根签名的证书(可能通过中间证书)。
    3. 将自签名证书添加到服务机器的“可信根”中。 This may induce subtle yet serious security risks。我个人反对这个选项,因为感觉真的很不安全。
    4. 切换到其他不使用客户端证书的身份验证方案。

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多