使用Vaadin应用程序进行通用访问卡(CAC)身份验证

时间:2015-07-21 14:33:35

标签: java authentication cac

我正在创建一个Vaadin Web应用程序,要求用户通过登录名和密码进行身份验证,我想知道是否可以添加CAC身份验证作为另一种身份验证方式。

总之,我的目标是,如果用户已使用其CAC进行身份验证,则允许访问该网站;如果用户未经过CAC身份验证,则需要标准登录(名称/密码)

通过搜索和谷歌搜索我发现Java PKCS#11,但它看起来像是一个桌面集成库。

此外,我看过thisthis帖子,看起来与我的情况类似但实际上并非如此。第一个是通过配置Web服务器来讨论整个Web应用程序的认证要求。第二个是Java PKCS#11作为桌面解决方案。

同样,我希望拥有的是" parallel"登录时,如果浏览器向服务器发送CAC证书,则服务器不应要求标准登录,否则为是。可能吗?此外,如果将CAC证书发送到服务器,是否有办法检索有关此CAC的数据,如所有者的姓名?

1 个答案:

答案 0 :(得分:2)

在正确配置的servlet容器中,您可以使用它来读取客户端证书(如果存在)

String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");

if (cipherSuite != null) {
    X509Certificate certChain[] = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
    if (certChain != null) {
        for (int i = 0; i < certChain.length; i++) {
            System.out.println ("Client Certificate [" + i + "] = "
                    + certChain[i].toString());
        }
    }
}