编程语言
首页 > 编程语言> > 在Java Applet中实现数字签名

在Java Applet中实现数字签名

作者:互联网

我试图使用Java Applet在基于Web的应用程序中签署一些数据(POST表单).用户的x509证书将在加密/智能卡中.签名需要采用附加的pkcs#7格式.

我使用本教程/代码作为构建applet的起点 – http://www.developer.com/java/other/article.php/3587361/Java-Applet-for-Signing-with-a-Smart-Card.htm

对我来说,最大的问题似乎是applet要求用户提供pkcs#11实现库的位置.这对我来说是一个很大的禁忌,因为我的典型用户不会知道他的pkcs#11库的位置.

从Oracle的Java文档 – http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html看来,Java并没有附带它自己的实现.

有没有办法在不向用户询问此位置的情况下进行此签名.我没有一个只适用于Windows上的IE和Firefox的解决方案.

我使用了一些智能卡/密码,我注意到插入它的那一刻,我可以看到IE和IE中的证书. Firefox的个人证书选项卡.这可能意味着加密令牌在插入卡时会注册它包含的所有证书,并在删除卡时将其取消注册.因此,当它执行时,它可能必须向操作系统/浏览器公开一些接口 – 这不能用于签名吗?

解决方法:

我们在SecureBlackox产品的Distributed Cryptography插件中完成了您现在要做的事情(使用客户端模块进行分布式签名),我们为其他浏览器提供IE和Java applet的ActiveX控件.

不幸的是,PKCS#11 DLL没有在任何地方注册,因此您无法避免向用户询问此DLL的位置.

大多数硬件设备都支持PKCS#11和CryptoAPI接口.在CryptoAPI接口中,CSP DLL将基于硬件的证书暴露给CryptoAPI引擎,从而暴露给应用程序.在这种情况下,您可以使用与Windows CryptoAPI一起使用的Java类.

PKCS#11是一个由硬件供应商实现的接口,因此Java无法实现它自己–JVM不是硬件而且不包含证书(即使它确实存在,也无法解决您的问题).我需要注意的是,Firefox内置了PKCS#11驱动程序,Firefox可以通过它访问自己的证书.这样做是为了统一支持软件和硬件存储的证书.

标签:java,digital-signature,jce,pkcs11,pkcs7
来源: https://codeday.me/bug/20190629/1325996.html