我可以使用 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)。这是我更喜欢的解决方案,但需要一些重构。