首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAC智能卡重新身份验证

CAC智能卡重新身份验证
EN

Stack Overflow用户
提问于 2009-11-26 07:47:40
回答 3查看 15.2K关注 0票数 10

我们有一个基于浏览器的应用程序,我们想让用户在进入它时重新进行身份验证。因此,当他们访问该URL时,我们希望向他们显示PIN提示,以便他们必须重新进行身份验证。有没有一种合理的方法来做到这一点?

补充信息:这是一个CAC卡,工作站上有ActivIdentity和Tumblewide卡。此外,如果需要,我还可以向工作站添加服务。浏览器都是IE7。web服务器是IIS6,页面主要是用ASP.NET编写的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-26 08:08:27

这里涉及到一些不同的软件。

首先是卡片本身。要执行数字签名,CAC必须处于“已验证”状态,这意味着在插入卡后输入PIN。除此之外,卡上的每个密钥都有一个标志,指示是否必须在每次使用密钥时输入PIN。我还没有检查过,但我想这是为CAC上的"email“密钥对设置的。因此,您需要找出哪些密钥设置了此"always verify“标志,并在服务上配置路径验证器以仅接受这些密钥。您可以在扩展密钥使用中要求特定的OID,或者从路径构建中排除某些DoD中间证书(可能会将它们标记为已撤销)。

与卡对话的机器上的中间件也可以缓存PIN,并在卡指示它在完成操作之前需要PIN时将其提供给卡。我认为ActivClient在版本6之前就是这样做的,但是在版本7中,这个选项似乎已经消失了。我还没有在Windows内置的PIV支持中找到这样的东西。这个“功能”可能会损害安全性,所以我猜测它是被故意删除的,不会有任何注册表黑客或其他方式来恢复行为。这是您无法控制的事情,除非您管理用户的计算机;没有可用于强制输入PIN的HTTP头或TLS选项。但是,对于较新的系统,这应该不是问题。

在服务器端,为了让客户端执行身份验证,必须进行完整的握手。如果存在有效的TLS会话,则不会进行客户端身份验证。因此,在请求身份验证之前,您需要找到一种方法来使TLS会话(而不是应用程序会话,它可能绑定到HTTP cookie)无效,或者将身份验证请求定向到另一个未启用会话的接口。

票数 11
EN

Stack Overflow用户

发布于 2009-11-26 16:51:37

在web上进行智能卡客户端身份验证有两种方法:标准的TLS/SSL或浏览器的自定义插件。我假设您谈论的是标准web浏览器(IE/FF/Safari)和SSL身份验证。

对于PIN提示,有两件事很重要:

browser

  • on-card的
  • SSL会话和SSL会话高速缓存相关私钥的身份验证状态
  • 中间件的实现方式。

最后,从安全的角度来看,它是卡知道什么时候“要求”PIN -一些卡和密钥需要一个PIN的每一个操作与密钥,一些卡可以获得一个PIN一次,并保持密钥的身份验证状态,直到它从读卡器中删除或由应用程序重置。

如果浏览器缓存中的会话不能被重用,或者当建立连接时,智能卡中间件( Linux上的PKCS#11、Windows上的CryptoAPI/BaseCSP模块或OSX上的Tokend )需要与卡上的密钥通信。如果卡上的身份验证状态要求输入PIN,则通常由浏览器触发回调。或者,如果中间件知道它将需要PIN,它将在与卡交谈之前询问它。

输入PIN与实际重新验证对私钥的访问权限和重新验证SSL会话之间没有1:1的关系。

使用标准SSL,您依赖于在浏览器中实现SSL的方式,并且在客户端不能有100%可靠的“通过输入PIN进行重新身份验证”。

如果你正在使用Linux,那么与OpenSC (其中,AFAIK可以使用CAC卡),你可以设置"transaction_reset“在opensc.conf为真,这导致卡被重置后,每一个交易(每次SSL会话协商),这样你就可以确保,每当你打开一个新的SSL会话,用户必须再次输入密码。不过,这是一个客户端配置,而不是服务器启动的功能。

票数 7
EN

Stack Overflow用户

发布于 2016-05-12 03:13:59

您可以使用javascript函数在少数浏览器上让浏览器忘记已有的SSL缓存:

代码语言:javascript
复制
function logout() {
    // clear browser authentication cache
    // IE specific
    try
    {
        document.execCommand("ClearAuthenticationCache", "false");
    }
    catch(e)
    {
        // do nothing
    }

    // clear for firefox or any browser that supports window.crypto API
    if (window.crypto && typeof window.crypto.logout === "function") {
        window.crypto.logout();
    }
}

您可以使用JavascriptPIN码方法调用上述注销函数,并可能将其重定向到logout.aspx页面,以强制客户端输入新的PIN码。

但它使用JavaScript,代码依赖于浏览器,并不适用于所有浏览器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1800745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档