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

标签 java alfresco digital-signature alfresco-share digital-certificate

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

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

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

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

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

最佳答案

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

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

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

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

  2. 本地应用程序收到文档,要求用户选择证书或输入卡并进行签名。由于是本地应用,没有安全限制

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

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

  • 软件安装与分发

  • 安全和加密

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

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

  • @firma + Autofirma : 西类牙公共(public)行政部门推广和使用的开源解决方案

  • SD-DSS + nexU (lowina):欧盟委员会推广的开源解决方案。查看演示 here

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

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

关于java - 如何使用我现有的 Web 项目实现数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138232/

相关文章:

javascript - Alfresco Share 网页预览折叠问题

alfresco - 使用 CMIS 获取所有 Alfresco 标签

java - 覆盖签名图像时出错

java - 从按钮单击事件打开另一个 JFrame

java - Java 中的 Mandelbrot 使用 4 线程

java - 在循环 block 中声明变量

java - 为什么Java代码不显示环境变量$JAVA_HOME和$M2_HOME?

postgresql - 是否可以在 Alfresco 数据库中创建新表?

java - 无密码数字签名

c++ - Windows 8 的驱动程序签名要求有何变化?