繁体   English   中英

在Java Applet中实现数字签名

[英]Implementing Digital Signing in a 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和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可以通过它访问自己的证书。 这样做是为了统一支持软件和硬件存储的证书。

智能卡或令牌驱动程序(PKCS#11)库有一个名为CSP(加密服务提供程序)的附加层,它充当设备驱动程序和操作系统加密服务之间的桥梁。 令牌驱动程序,一旦安装,也会添加此CSP,因此插入令牌或智能卡使其中的证书可用(其作为安全地存储在加密设备上的私钥的句柄)。

对于从浏览器作为客户端进行签名,现代浏览器不再支持applet。 您可以将浏览器扩展用于在浏览器后面运行本机应用程序以访问证书存储区并在浏览器中通过JavaScript提供签名功能的目的。 Signer Digital Browser Extension使用JavaScript提供各种类型的签名表单浏览器。 有关使用Web浏览器扩展程序实现的各种操作,请参阅“ 从浏览器数字签名 ”页面上的3个不同的SO答案链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM