如何在PHP中实现数字签名

7
我需要在PHP中实现一个数字签名,该签名将作为PDF证书打印出来。
要求是授权人员(如注册员或副注册员)对证书进行数字签名。实施数字签名的基本思想是了解以下内容:
1. 证书是否由授权人员进行数字签名,以及是哪个授权人员进行的签名,还是其他没有权限的人创建了该签名。 2. 注册员/副注册员对证书进行数字签名后,是否有任何更改(以防伪造)。 3. 文档签名时间或更改时间。
我在这个主题上进行了很多搜索,但没有找到任何相关信息,也没有任何教程可以指导我如何实现。我以前从未听说过这个,但根据要求,我必须完成这个任务。所以请有经验的人指导我或帮助我如何在PHP中实现这个功能。

对于基于浏览器的数字签名,可以使用JavaScript,请参考我的SO回答https://dev59.com/WFwX5IYBdhLWcg3w8TIf#55676351。对于PHP而言,并没有太多(免费)组件可用。您可能需要使用Java组件,通过JavaBridge在Tomcat上运行,并通过Apache代理从浏览器USB令牌和PHP签署PDF文档。 - Bharat Vasant
1个回答

2

有可用的软件库可以使您对PDF文件进行数字签名。iText是其中之一,但还有很多其他库。

然而,所有这些库都倾向于存在一个共同问题:保护签名者的数字证书,特别是证书的私钥。

如果签名的PDF文件将被审计或提交给希望确保该PDF文件确实由所谓的签署人签署的接收方,则数字证书(和签名系统)必须是QSCD - 合格的签名创建设备。 (同样概念的旧名称为SSCD,“安全签名创建设备”)。

智能卡是创建QSCD的旧方法。更现代的方法是使用集中式签名设备。我的公司DocuSign使用QSCDAPI,其他公司也有类似的产品。


我已经深入研究了创建基于云的QSCD,我知道必须使用openssl_*来创建PKI,但现在我不知道如何实际签署文档,一旦签署,如何解密并确保它是相同的。此外,创建密钥后,如何将它们存储在.pem文件中?您有相关的教程可以帮助吗?我不是为企业构建一个,只是为了个人使用而签署我发送给人们的任何东西(这是个人用途),我将构建一个API供人们使用以检查我是否确实签署了它。 - Jaquarh
嗨@KDOT,你所问的需要一本书来回答。为什么不使用像iText或竞争对手这样的库呢?或者使用我们的API通过DocuSign对文档进行数字签名。请查看Express SBS产品。注意:我在DocuSign工作。 - Larry K
我并不真的想因为法律原因使用QSCD,我只是想利用签署证书的想法来验证它不是伪造的。这个想法是,一个工人可以请求他的职位证明书,将其交给另一个机构,然后该机构可以使用API来检查证书是否真实。我不太确定我是否正确地掌握了QSCD的概念,如果我只是将数据存储在数据库中,然后制作一个简单的API,但我只是想发布PDF证书,但是再次,如何确保职位没有被篡改? - Jaquarh
@LarryK - 为什么不使用DocuSign API?因为他们要收取每个签署文件3美元的费用,即使您批量签署,每年12000份(每月1000份),他们也要收取32400美元或每个发送文件2.70美元的费用。这太疯狂了。 - j_allen_morris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接