我要求用户使用连接到PC的智能卡(令牌)。当他访问网站时,我需要通过从智能卡读取证书信息来验证用户,然后使用DB验证这些数据。如果信息正确登录用户;否则显示错误消息或证书。
我们使用由与智能卡使用的CA不同的CA进行身份验证的SSL(HTTPS)连接。
我怎么能用Java做到这一点?
答案 0 :(得分:1)
您对预期身份验证过程的描述显示了一个不寻常的弱点。证书保存公钥以及一些其他数据,如用户名等,i。即完全由公共数据组成。通常情况下,用户使用她的私钥来生成签名,并使用证书中的公钥验证签名,这有利于通过生成签名,间接证明卡,用户知道私人所需的PIN。密钥并且还可以防止重放攻击。此外,还不需要证书的数据库条目,因为您可以使用证书中的卡号等内容。 (但是,您可能需要其他信息的记录,例如相关的用户角色)。
答案 1 :(得分:0)
用户需要在门户网站上预先注册他的公钥(或者说包含公钥的证书)。然后在登录/身份验证时,用户使用智能卡中的私钥或浏览器端的 USB 令牌对身份验证令牌(例如“用户 ID|密码”)进行签名,并将带有身份验证令牌和签名令牌的请求发送到服务器。在服务器端,使用用户注册的公钥来验证签名的token,如果签名验证成功,用户就可以访问portal了。
在浏览器端,您可以使用来自 Digital Signing Browser Extension
的签名 Javascript API