Ivo*_*Ivo 10 java applet google-chrome digital-signature
目前我们已经开发出一个可以使用java applet对文档进行数字签名的系统.然而,由于禁止使用chrome,我们正在寻找替代数字签名解决方案.
目前签署的工作方式如下:
一种替代解决方案是在浏览器中导入证书并使用js进行签名.但这不是一个用户友好的解决方案.
另一个解决方案可能是要求用户使用JNLP下载运行程序,该程序下载并签署文档并使用HTTP多部分POST自动上载它.这种方法的缺点是它需要额外的用户交互(下载操作)而我们丢失浏览器http会话,因此我们必须再次进行身份验证.
哪个更可行?你能想到另类吗?
以下所有帖子都建议基于RSA的签名.
您可以使用纯Javascript + Web Crypto api进行签名.
关键点是使用HTML5 <file>标签提取密钥,使用伪造 js库处理密钥和哈希并使用deoxxa封装 xml 并使用web加密进行签名/验证(此外,伪造也可以签名/验证但网络加密更快).
如果您使用独占规范化签署xmls,请使用deoxxa(您应该在使用前对其进行浏览).如果您签署xml并需要进行包容性规范化,请使用 我的deoxxa分支(托管在自己的gitlab服务器上).我才懒得重命名独家包容,但我的.js文件执行包容性,相信我)使用示例forge+ deoxxa+ html5_p12_file_read中 signJs,verifyJs文件.
此外,forge支持签署二进制文件(CMS或旧命名风格PKCS#7),但我的JSP文件没有这样的示例.关于OCSP中的OCSP和链测试 - 我在forge中打开了这个问题,但是在JS中处理CRL/OCSP和TSP协议似乎太难了,这就是为什么你可以登录JS,但验证可能会被拆分 - 在JS中进行哈希检查(在我的JSP中显示伪造用法和附加代码)但是在您的Web服务中执行CRL,链等等智能检查 - 您可以提取X509Certificate并将其发送到您的Web服务并使用bouncycastle或任何其他酷库进行智能检查.X509Certificate无论如何都是公共信息,将其发送到服务没有问题,但摘要检查需要文件,你可能不想将文件发送到服务,因此使用伪造来检查我的verifyJS文件中显示的摘要.
我的JS代码没有重构,甚至没有在OOP中,目前我没有在该项目上工作,但在某些阶段我完全使用文件系统中的p12键进行xml RSA siging.
我的repo中的最新JSP使用伪造只是为了解析p12文件并提供从它们到Web Crypto API的密钥,但我的repo历史记录也有纯Javascript签名/验证(如果你不喜欢web crypto api).看项目分支的历史.