使用客户端证书的智能卡身份验证

Posted

技术标签:

【中文标题】使用客户端证书的智能卡身份验证【英文标题】:Smart card authentication using a client certificate 【发布时间】:2012-08-01 13:43:03 【问题描述】:

我有一个第三方 Web 应用程序,现在我的经理想要将智能卡身份验证添加到某些页面(而不是整个应用程序)并返回证书信息。我在想的是向这些页面添加按钮,在onclick 事件中,我将进行客户端证书身份验证(将出现证书选择窗口,然后出现“PIN”窗口)并返回证书对象以供进一步加工。

我最初考虑使用 Web 服务来进行客户端证书身份验证并返回证书信息,这会很棒,因为我们可能会考虑在其他 Web 应用程序(在不同平台上)中使用该 Web 服务。但是,我找不到任何这样做的代码示例。然后我找到了IIS solution。

我现在创建了一个单独的文件夹,其中包含一个需要客户端证书的页面。在按钮单击事件中,我重定向到该页面。然后在该页面上,我使用 X509Certificate 类检索证书信息。我认为这对我正在尝试做的事情没有帮助,或者至少我不知道它有什么帮助。

所以我的问题是(抱歉,背景描述太长了)

    如何从带有认证结果的页面重定向回来? 如果可能的话,任何关于如何构建一个 Web 服务的参考资料,该服务以与 IIS 相同的方式进行客户端证书身份验证?

谢谢

更新 我环顾四周,仍然不知道如何实现这一目标。我不确定如何在 SSL/TLS 握手阶段为 Web 服务编写代码。我也不知道如何将认证返回到我调用此函数的页面。所以我现在要做的是从需要客户端身份验证的受保护页面重定向。似乎 Web 服务器缓存了身份验证结果。这是我的第三个问题,希望有人能回答。

如何在页面会话结束时清除身份验证结果,以便每次访问该页面时,它都会请求客户端身份验证(其中会出现证书选择窗口,然后是“PIN”窗口)?

【问题讨论】:

【参考方案1】:

如果您的应用托管在 IIS 中,则只需添加(在 web.config 中)一个部分,说明这些页面需要客户端证书。然后浏览器会要求用户提供证书。

【讨论】:

感谢您的回复。我检查了 IIS 中该文件夹上所需的 SSL 设置。这还不够吗? 应该是 - 假设客户端系统(浏览器等)设置为使用智能卡证书 这就是发生的事情。我有一个不在受限文件夹 page1 下的页面。在 page1 的脚本中,我使用重定向到请求客户端证书的页面 (page2),该页面在 IIS 中具有 SSL 设置的文件夹下请求客户端证书。当我第一次访问page1时,它会提示证书选择窗口,然后是PIN窗口,然后显示page2。然后我关闭窗口,打开一个新的,输入page1的地址,这次出现证书选择窗口,我选择相同的证书后,它不会用PIN窗口挑战我,只显示page2。我希望 PIN 窗口始终触发 这是正常的智能卡行为。一旦用户输入 PIN 来解锁智能卡,他们就不需要再这样做了。如果您编写代码在用户机器上运行,您可能会强制执行它; (真正的代码,不是javascript)。浏览器插件可能可以做到,但我不确定。您需要直接调用智能卡功能(在用户机器上) 嗨@pm100,我怎样才能强制输入密码?这种每次我进行身份验证时都询问密码的智能卡行为正在扼杀使用。【参考方案2】:

Windows 具有缓存功能,默认情况下,该功能允许应用程序在初始 PIN 提示后或直到应用程序完全关闭之前的有限时间内访问私钥。

要禁用,请设置此注册表项。 (或使用 GPO)

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography]
"PrivKeyCacheMaxItems"=dword:00000000
"PrivKeyCachePurgeIntervalSeconds"=dword:00000000

【讨论】:

以上是关于使用客户端证书的智能卡身份验证的主要内容,如果未能解决你的问题,请参考以下文章

DotNet Core:如何跨平台客户端证书 TLS 身份验证?

在 iOS 上使用智能卡进行 TLS 身份验证

IIS 7 身份验证 - 仅允许智能卡登录证书

SAVON 是不是支持客户端证书身份验证

启用证书身份验证时获取 401.2

为啥要使用证书对客户端进行身份验证?