我正在创建一个Vaadin Web应用程序,要求用户通过登录名和密码进行身份验证,我想知道是否可以添加CAC身份验证作为另一种身份验证方式。
总之,我的目标是,如果用户已使用其CAC进行身份验证,则允许访问该网站;如果用户未经过CAC身份验证,则需要标准登录(名称/密码)
通过搜索和谷歌搜索我发现Java PKCS#11,但它看起来像是一个桌面集成库。
此外,我看过this和this帖子,看起来与我的情况类似但实际上并非如此。第一个是通过配置Web服务器来讨论整个Web应用程序的认证要求。第二个是Java PKCS#11作为桌面解决方案。
同样,我希望拥有的是" parallel"登录时,如果浏览器向服务器发送CAC证书,则服务器不应要求标准登录,否则为是。可能吗?此外,如果将CAC证书发送到服务器,是否有办法检索有关此CAC的数据,如所有者的姓名?
答案 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());
}
}
}