0

我需要开发一个 java 小程序,用于 Tomcat 6(服务器)和智能卡“ IDGo 300 ”(客户端)之间的相互身份验证。

为了做到这一点,我想到了以下方案:

  1. Tomcat(服务器)向 SmartCard(客户端)发送其数字证书(由 CA 签名)的请求。
  2. 客户端输入 PIN 并选择智能卡上的可用证书,然后 Applet 将其证书(由 CA 签名)发送到 tomcat。tomcat 验证数字证书,如果正确则发回他的证书。
  3. 小程序验证服务器的证书,如果证书正确,则向服务器发送确认。
  4. 服务器为客户端提供完全访问权限以使用 Web 应用程序。

我有一些问题:

  1. 这个方案可行吗?
  2. 我想通过我的小程序管理所有内容,当客户端断开智能卡时,他将失去对服务器的访问权限。
4

1 回答 1

0

可行吗?是的。实用吗?不,我会主张使用厚实的 Java 应用程序。

首先,您不能通过简单地发送证书来进行身份验证。您还需要诸如质询-响应之类的东西(输入 PIN 后由智能卡上的私钥创建的签名)。

其次,您需要特殊权限才能使用 Applet 中的任何硬件。这意味着您必须更改客户端的权限,或者您可能必须签署 Applet,之后用户必须接受该特定任务的 Applet。

小程序有非常特定的生命周期。您可能不想将卡的移除与 Applet 的生命周期同步。当您断开连接时,用户可能会阻止发送的响应。您可以使用waitForCardAbsent()单独的线程测试卡是否已被移除。

如果您不能信任连接(没有 SSL 的 HTTP),那么您就不能信任 Applet 代码。用户可能不想将他们的 PIN 输入到不受信任的代码中。

如果您想支持多个浏览器和 Java 运行时,您将遇到无数问题。

作为一个小问题,该javax.smartcardio软件包可能并不总是可用;这不是javax一无是处。

于 2012-07-29T12:20:17.420 回答