【问题标题】:How do I silently request a specific SSL client certificate如何静默请求特定的 SSL 客户端证书
【发布时间】:2014-07-24 04:36:38
【问题描述】:

我有一个使用表单身份验证的 ASP.NET MVC5 站点,但也通过设置使用客户端证书来增加一层安全性:

<security>
    <access sslFlags="SslNegotiateCert" />
</security>

客户端证书是可选的,因为在用户实际尝试登录站点之前不需要它。当用户尝试登录时,站点将验证 Thumbnail、Issuer,并将 Subject 与尝试登录的用户进行比较(每个用户会有不同的证书)。问题是每次用户来到当他们首次进入该站点时,系统会提示他们提供客户端证书,这可能会在以下情况下导致问题:

  • 他们不小心选择了错误的证书
  • 想要注销并使用其他用户重新登录(未重新提示输入证书)

有没有一种方法可以根据提供的登录信息静默\自动检测客户端证书,而不是让用户在首次进入网站时选择证书?

编辑:添加更具体的实际\期望行为示例

实际行为:

  • 用户打开 Chrome 并转到 http://www.example.com
  • Chrome 弹出窗口询问用户他们想要使用什么客户端证书
  • 用户选择“user3 (www.example.com)”
  • 用户看到未经身份验证的主页视图并单击“登录”按钮
  • 用户输入用户名:“user2”和密码:“****
  • 网站验证 ClientCertificate.Subject == 用户名(失败,因为证书适用于“user3”)

期望的行为:

  • 用户打开 Chrome 并转到 http://www.example.com
  • 用户看到未经身份验证的主页视图并单击“登录”按钮
  • 用户输入用户名:“user2”和密码:“****
  • 浏览器做某事以静默检测客户端是否具有证书“user2 (www.example.com)”,几乎没有用户交互

    问题:“期望的行为”是否可能以某种方式实现? (header?javascript?浏览器插件?)

【问题讨论】:

  • 您可以添加一个带有用户身份的友好名称并以这种方式进行搜索。
  • 您可能还可以看看这个:technet.microsoft.com/en-us/library/bb742438.aspx 将证书映射到用户帐户的分步指南 这篇文章很旧,但应该仍然能够从中找出一些东西
  • 谢谢。我实际上没有映射问题,而只是提供证书->登录的顺序。我会更新我的问题以更好地解释......
  • 只是想知道为什么您认为有必要同时拥有客户端证书身份验证和用户名+密码。考虑到您似乎建议您的用户也可能在同一个网站上拥有多个有效身份,这对于大多数要求来说听起来有点过于复杂......
  • 通常,这种身份验证的两个因素是:用户拥有什么(智能卡)和用户知道什么(解锁智能卡的 PIN 码)。您将在这里介绍的将是第三个因素。不确定有多少用户对此有足够的耐心(通常,当用户发现安全措施过于繁琐时,他们会尽其所能绕过它们,这可能比您想要实现的更糟糕)。如果你真的想要一个服务器端密码,可能值得实现一个只询问密码的系统,从证书中获取用户名。

标签: asp.net asp.net-mvc iis ssl client-certificates


【解决方案1】:

默认情况下,由于安全问题,用户在访问网站时根本无法为用户选择证书。

如果需要,用户可以将浏览器配置为默认使用网站的特定证书,但这是另一回事。

对于第二部分,证书用于保护浏览器(客户端)和服务器之间的连接,所以如果你想使用另一个证书,你应该完全完成浏览器和服务器之间的连接,不幸的是你会在大多数情况下,需要关闭浏览器并再次打开它才能发生这种情况。或者通过清理证书缓存,但这需要用户在浏览器中手动完成。

您可以在这里找到关于证书和 SSL 工作原理的非常好的解释:

https://security.stackexchange.com/questions/20803/how-does-ssl-work

【讨论】:

  • @Buno 如果您再次阅读该句子,您会看到这意味着只有用户可以选择证书,您不能以编程方式从网站为用户选择证书。根本不可能。
【解决方案2】:

我不知道在单个应用程序中执行此操作的方法。一种方法是创建两个 asp.net-mvc 应用程序。第二个站点将是一个子目录应用程序,在子目录的web.config 中带有SslNegotiateCert,并包含所有安全方法/登录等。

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 2013-07-08
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多