我可以使用MS CryptoAPI和PKCS#11(使用.dll注册提供程序)访问带有Java Applet(嵌入式)的SmartCard。我可以使用两者,但是现在我正在使用CryptoAPI来更轻松地支持所有键盘/ Windows版本:
keystore = KeyStore.getInstance("Windows-MY");
keystore.load(null,null);
我正在使用Javascript与Java通信,以便在我正在开发的Web应用程序中签署一些操作。
默认用例正是我需要的:
问题是:它是一个嵌入式Applet。当我在网页A中签名,然后我转到网页B(通过链接或重定向,例如),Applet被销毁/创建(就像JVM一样)并且会话丢失所以我必须介绍再次PIN。如果我不离开/重新加载实际的网页,这不会发生。
问题:有没有办法以编程方式重用会话/ Applet / JVM?或以可以避免此问题的方式加载密钥库?
我已经知道的可行解决方案:
答案 0 :(得分:1)
我最终以完全不同的方式执行此操作:为签名创建客户端桌面应用程序。此应用程序安装在所有桌面客户端中(这对我来说没问题,因为它是一个企业环境)。
这个新应用程序侦听一个HttpListener
的端口。我通过javascript(jsonp)从网络连接,发送要签名的字符串,然后返回带有签名结果的js回调。