我有一个要求,其中用户将使用连接到其PC的智能卡(令牌)。当他访问网站时,我需要通过从智能卡读取证书信息对用户进行身份验证,然后使用数据库验证此数据。如果信息正确,则登录用户;否则显示错误消息或证书。
我们使用SSL(HTTPS)连接,该连接由不同于智能卡所使用的CA的CA进行身份验证。
我如何在Java中做到这一点呢?
发布于 2014-11-11 06:02:41
您对预期身份验证过程的描述显示了一个不同寻常的弱点。证书持有公钥和一些额外的数据,如用户名等,即完全由公共数据组成。通常,用户应用其私钥来生成签名,而您使用证书中的公钥来验证签名,这样做的好处是,通过生成签名,卡可以间接证明用户知道私钥所需的PIN,还可以防止重放攻击。此外,证书的数据库条目也不是必需的,因为您可以使用证书中的卡号之类的内容。(但是,您可能需要记录其他信息,如关联的用户角色)。
发布于 2021-07-14 21:27:13
用户需要向门户预先注册他的公钥(或者说包含公钥的证书)。然后在登录/认证时,用户在浏览器端使用智能卡或usb令牌中的私钥对authtoken (即"UserID|Password")进行签名,并将带有authtoken和签名令牌的请求发送到服务器。在服务器端,使用用户注册的公钥对签名的token进行验证,如果签名验证成功,则允许用户访问portal。
在浏览器端,您可以使用来自Digital Signing Browser Extension的签名Javascript API
https://stackoverflow.com/questions/26852637
复制相似问题