Chrome下的数字签名小程序的替代方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chrome下的数字签名小程序的替代方案相关的知识,希望对你有一定的参考价值。
目前我们已经开发出一个可以使用java applet对文档进行数字签名的系统。然而,由于禁止使用chrome,我们正在寻找替代数字签名解决方案。
目前签署的工作方式如下:
- HTTP GET被发送到servlet以获取将要签名的文档;
- 小程序启动,数字签名驱动程序从文件系统中提取,用户输入PIN;
- applet获取认证链,检查CRL / OSCP并签署文档;
- applet将已签名文件的多部分帖子发送到系统中的servlet。
一种替代解决方案是在浏览器中导入证书并使用js进行签名。但这不是一个用户友好的解决方案。
另一个解决方案可能是要求用户使用JNLP下载运行程序,该程序下载并签署文档并使用HTTP多部分POST自动上载它。这种方法的缺点是它需要额外的用户交互(下载操作)而我们丢失浏览器http会话,因此我们必须再次进行身份验证。
哪个更可行?你能想到另类吗?
以下所有帖子都建议基于RSA的签名。
您可以在纯javascript Web Crypto api中签名。
关键点是使用html5 <file>
标记提取密钥,使用forge js库处理密钥和哈希并使用deoxxa封装xml并使用web加密进行签名/验证(此外,伪造也可以签名/验证但网络加密更快)。
如果您使用独占规范化签署xmls,请使用deoxxa(您应该在使用前对其进行浏览)。如果您签署xml并需要进行包容性规范化,请使用my fork of deoxxa(托管在自己的gitlab服务器上)。我太懒了,不能重命名包容,但我的.js文件执行包容性,相信我)在forge
中使用deoxxa
+ html5_p12_file_read
+ signJs, verifyJs files的例子。
此外,forge支持签署二进制文件(CMS或旧命名风格PKCS#7),但我的JSP文件没有这样的示例。关于OCSP中的OCSP和链测试 - 我在forge中使用opened the issue,但是在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)。看项目分支的历史。
以上是关于Chrome下的数字签名小程序的替代方案的主要内容,如果未能解决你的问题,请参考以下文章