繁体   English   中英

Chrome下数字签名小程序的替代方案

[英]Alternative for digital signing applet under Chrome

目前,我们已经开发了一个系统,可以使用 Java 小程序对文档进行数字签名。 然而,随着 chrome 下小程序的禁令,我们正在寻找一种替代的数字签名解决方案。

目前签署的工作方式如下:

  1. HTTP GET 被发送到 servlet 以获取将要签名的文档;
  2. 小程序启动,数字签名驱动从文件系统中提取出来,用户输入PIN;
  3. 小程序获取认证链,检查CRL/OSCP并签署文件;
  4. 小程序将带有已签名文件的多部分帖子发送到系统中的 servlet。

一种替代解决方案是在浏览器中导入证书并使用 js 进行签名。 但这不会是一个用户友好的解决方案。

另一种解决方案可能是要求用户下载一个使用 JNLP 运行的程序,该程序下载并签署文档并使用 HTTP 多部分 POST 自动上传它。 这种方法的缺点是它需要额外的用户交互(下载操作),并且我们会丢失浏览器 http 会话,因此我们必须再次进行身份验证。

哪个更有活力? 你能想到替代方案吗?

以下所有帖子均建议使用基于RSA的签名。

您可以使用纯Javascript + Web加密api对其进行签名。

关键点是提取与HTML5键<file>标签,使用伪造的js库处理密钥和散列和推崇的XML与deoxxa和使用网络加密的签名/验证(另外,锻造也可以签名/验证,但网络加密速度更快)。

如果要使用专有规范化对xml进行签名,请使用deoxxa(在使用前应先对其进行浏览器化)。 如果您对xml进行签名并需要进行标准化,请使用我的deoxxa分支 (托管在自己的gitlab服务器上)。 我才懒得重命名独家包容,但我的.js文件执行包容,相信我)使用示例forge + deoxxa + html5_p12_file_readsignJs,verifyJs文件

另外,forge支持签署二进制文件(CMS或较旧的命名方式PKCS#7),但我的JSP文件没有这样的示例。 关于JS中的OCSP和链式测试-我在伪造中打开了问题 ,但是似乎很难在JS中处理CRL / OCSP和TSP协议,这就是为什么您可以登录JS,但要进行验证的原因-在JS中进行哈希检查(在我的JSP中显示伪造用法和其他代码),但是Web服务中会执行CRL,chain等智能检查,您可以提取X509Certificate并将其发送到Web服务,并使用bouncycastle或任何其他炫酷的库进行智能检查。 X509Certificate仍然是公共信息,在将其发送到服务中没有问题,但是摘要检查需要文件,您可能不希望将文件发送到服务,因此使用伪造来检查在我的verifyJS文件中显示的摘要。

我的JS代码没有重构,甚至没有在OOP中重构,目前我不在那个项目上工作,但是在某个阶段,我已经在文件系统中使用p12密钥完全使用了XML RSA siging。

我的存储库中最新的JSP仅使用伪造来解析p12文件并将其密钥提供给Web Crypto API,但我的存储库历史记录也具有纯Javascript签名/验证(如果您不喜欢Web crypto API)。 查看项目分支的历史记录。

由于对此问题的某些答案/评论期望WebCrypto API提供对本地证书存储的访问(在2016年),但是WebCrypto API不提供对本地证书存储的访问。

因此,在当前情况下,最好的选择是使用来自浏览器的Chrome扩展程序数字签名或任何其他可用的浏览器扩展程序进行数字签名。 上面的链接页面还指向3个不同的Stacks Overflow答案,以实现不同的签名任务和方案以及JavaScript源代码。

暂无
暂无

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

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