用于与智能卡进行相互身份验证的Java Applet

时间:2012-07-28 17:27:21

标签: applet certificate smartcard mutual-authentication

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

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

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

    1. 这个方案可行吗?
    2. 我想通过我的applet管理所有内容,当客户端断开智能卡时,他就无法访问服务器。

1 个答案:

答案 0 :(得分:0)

可行吗?是。这是实用的吗?不,我会争论一个厚厚的Java应用程序。

首先,您只需发送证书即可进行身份验证。您还需要一些挑战响应(在输入PIN后,智能卡上的私钥创建的签名)。

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

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

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

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

作为一个小问题,javax.smartcardio包可能并不总是可用;它不在javax没有。