如何以静默方式请求特定的SSL客户端证书

时间:2014-06-03 18:04:39

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

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

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

客户端证书是可选的,因为在用户实际尝试登录该站点之前不需要它。当用户尝试登录时,该站点将验证缩略图,发行者,并将主题与尝试登录的用户进行比较(每个用户将有不同的证书)。问题是每次用户访问网站在首次进入网站时会被提示提供客户端证书,这可能会导致以下问题:

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

有没有办法静默\自动检测基于提供的登录的客户端证书,而不是让用户在首次进入网站时选择证书?

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

实际行为:

  • 用户打开Chrome并转到http://www.example.com
  • Chrome弹出式窗口会询问用户要使用的客户端证书
  • 用户选择&#34; user3 (www.example.com)&#34;
  • 用户看到未经身份验证的主页视图&amp;点击&#34;登录&#34;按钮
  • 用户输入用户名:&#34; user2 &#34;和密码:&#34; **** &#34;
  • 站点验证ClientCertificate.Subject ==用户名(因为证书用于&#34; user3&#34;而失败)

所需行为:

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

    问题:&#34;期望的行为&#34;有可能吗? (标题?javascript?浏览器插件?)

2 个答案:

答案 0 :(得分:1)

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

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

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

您可以在此找到有关证书和SSL如何工作的非常好的解释:

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

答案 1 :(得分:0)

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