记住使用Java Applet访问Keystore的SmartCard PIN

时间:2013-01-04 10:17:21

标签: java applet keystore smartcard pkcs#11

我可以使用MS CryptoAPI和PKCS#11(使用.dll注册提供程序)访问带有Java Applet(嵌入式)的SmartCard。我可以使用两者,但是现在我正在使用CryptoAPI来更轻松地支持所有键盘/ Windows版本:

keystore = KeyStore.getInstance("Windows-MY");
keystore.load(null,null);

我正在使用Javascript与Java通信,以便在我正在开发的Web应用程序中签署一些操作。

默认用例正是我需要的:

  • 我获取/加载Keystore
  • 我尝试签名,它要求输入PIN码,一旦介绍它就会记住,直到会话结束(当我解压缩智能卡或缓存超时时)。

问题是:它是一个嵌入式Applet。当我在网页A中签名,然后我转到网页B(通过链接或重定向,例如),Applet被销毁/创建(就像JVM一样)并且会话丢失所以我必须介绍再次PIN。如果我不离开/重新加载实际的网页,这不会发生。

问题:有没有办法以编程方式重用会话/ Applet / JVM?或以可以避免此问题的方式加载密钥库?

我已经知道的可行解决方案:

  • 免费浮动小程序。我不能,它没有GUI,我需要与JS通信......
  • 框架集/ iframe中的Web。脏。
  • Ajaxify web(只有一个页面+ Ajax中的所有操作+某种历史JS插件或PushState)。这是我更喜欢的解决方案,但需要进行一些重构。

1 个答案:

答案 0 :(得分:1)

我最终以完全不同的方式执行此操作:为签名创建客户端桌面应用程序。此应用程序安装在所有桌面客户端中(这对我来说没问题,因为它是一个企业环境)。 这个新应用程序侦听一个HttpListener的端口。我通过javascript(jsonp)从网络连接,发送要签名的字符串,然后返回带有签名结果的js回调。

  • 它现在记住了PIN,因为它不会丢失会话。
  • 因此,不需要Java。