1

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

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

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

默认用例正是我所需要的:

  • 我获取/加载密钥库
  • 我尝试签署一些东西,它要求输入 PIN,并且一旦引入它就会记住直到会话结束(当我提取智能卡或缓存超时时)。

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

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

我已经知道的可能的解决方法:

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

1 回答 1

1

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

  • 它现在会记住 PIN,因为它不会丢失会话。
  • 因此,不需要Java。
于 2013-03-04T14:45:58.143 回答