【问题标题】:How can I read data from a smart card to authenticate a user?如何从智能卡读取数据以验证用户身份?
【发布时间】:2014-11-10 14:30:57
【问题描述】:

我有一个要求,用户将使用连接到他的 PC 的智能卡(令牌)。当他访问网站时,我需要通过从智能卡中读取证书信息来验证用户身份,然后使用数据库验证这些数据。如果信息正确,则登录用户;否则显示错误消息或证书。

我们使用由不同于智能卡所用 CA 的 CA 认证的 SSL(HTTPS) 连接。

如何在 Java 中做到这一点?

【问题讨论】:

  • 你检查过使用Java Smart Card I/O API的例子吗?我自己没有用过,但这是要走的路。
  • @PavelHoral 适用于客户端应用程序,但在这种情况下它是一个网络应用程序。
  • 使用 SSL 客户端证书身份验证,并让用户将其客户端证书放在他们的智能卡上。

标签: java digital-signature smartcard


【解决方案1】:

您对预期身份验证过程的描述显示了一个不寻常的弱点。该证书包含带有一些附加数据(如用户名等)的公钥,即。 e.完全由公共数据组成。通常,用户使用她的私钥来生成签名,然后您使用证书中的公钥验证签名,这样做的好处是,通过生成签名,卡间接证明,用户知道私钥所需的 PIN键,还可以防止重放攻击。证书的数据库条目也不是必需的,因为您可以使用证书中的卡号之类的东西。 (但是,您可能需要记录以获取其他信息,例如关联的用户角色)。

【讨论】:

    【解决方案2】:

    用户需要在门户网站预先注册他的公钥(或者说包含公钥的证书)。然后在登录/身份验证时,用户使用他在智能卡中的私钥或浏览器端的 usb 令牌签署 authtoken(比如“UserID|Password”),并将带有 authtoken 和签名令牌的请求发送到服务器。在服务器端,使用用户注册的公钥验证签名token,如果签名验证成功,用户可能被允许访问portal。

    在浏览器端,您可以使用来自Digital Signing Browser Extension 的签名Javascript API

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2011-11-25
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多