如何使用我现有的 Web 项目实现数字签名

How to implement digital signature with my existing web project

我正在处理用户需要在文档上进行数字签名的项目。我检查了 google 并知道 sinadura,它是一个桌面应用程序,但我需要将其调用到我的 Web 应用程序中。

我在 Linux 服务器 (https://www.alfresco.com/thank-you/thank-you-downloading-alfresco-community-edition) 上安装了 alfresco 社区版,并按照下面的说明进行操作 GitHub link。

https://github.com/zylklab/alfresco-sinadura

我已经按照上面的说明成功实施了。但 Alfresco 是一个大项目,还提供了其他几个功能。但我不需要那个,我只需要将数字签名部分实现到我自己的 web 应用程序中,类似于 alfresco

如何在我现有的项目中实现数字签名部分?谁能给个建议

浏览器的安全限制不允许java脚本访问系统证书密钥库或智能卡。以前 java 小程序可以使用,但随着最新的浏览器更新,它不再可能。

当前浏览器中的数字签名解决方案需要在用户计算机上安装桌面软件。运行过程如下:

安装:用户在自己的电脑上安装桌面软件。该软件安装自签名证书并包含一个嵌入式浏览器,该浏览器侦听计算机端口并将其作为服务运行

  1. Web 应用程序使用安全的 Web 连接请求本地软件的签名。例如https://localhost:1234/sign?doc=xxxx.浏览器等待结果

  2. 本地应用程序收到文件,要求用户select证书或入卡并签名。由于是本地应用程序,因此没有安全限制

  3. Web 应用程序收到结果。可以通过REST服务查询本地应用,也可以打开websocket。

这个概念很简单(向本地应用程序请求签名的Web应用程序),但是这种类型的应用程序的构造相当复杂,因为你必须采取考虑到许多其他因素:

  • 软件安装与分发

  • 安全和加密

  • 数字签名格式:XAdES、CAdES、PAdES 等。它们可以在应用程序中实现或分 3 个阶段使用签名服务,其中文档在服务器上并且对单个哈希进行签名本地

所以我建议使用现有的解决方案:

  • @firma + Autofirma:西班牙public政府推广和使用的开源解决方案

  • SD-DSS + nexU(lowina): Open-source solution promoted by the European Commision. Check the demo here

  • chrome token signing:Chrome 和 Firefox 扩展,用于在为爱沙尼亚政府开发的网络上使用您的 eID 进行签名

Sinadura 也是一个开源项目,据我所知,它的工作方式类似,但我不知道它是否有重要的参考资料,而且我还没有找到 API

Alfresco 中有一些配置可以创建自定义操作。

您可以在户外创建自定义操作,

您可以执行 java class 代码在文件上创建数字签名。

你可以参考this java class

很难从你提供的高层次上判断什么能满足你的要求。 "Digital signature" 是一个非常广泛和通用的要求。合法的数字签名可以像一个文本字段一样简单,并向用户提供有关如何键入 conformed signature 的具体说明。当然,您还可以使用加密证书对文档进行签名。

听起来您似乎尝试过 Alfresco 和众多可用的数字签名插件之一,但您不想仅仅为了满足此要求而实施整个企业内容管理平台。

一个想法是查看像 Docusign or RightSignature 这样的 SaaS 产品。

另一个想法是开发您自己的简单服务。例如,如果您需要签名的文档是 PDF,或者可以轻松转换为 PDF,您可以使用 iText PDF API 之类的东西在服务器端的 PDF 文档上创建数字签名。