如何在PHP中实现数字签名

如何在PHP中实现数字签名,php,digital-signature,Php,Digital Signature,我必须在证书中实现数字签名,我们在PHP中以PDF格式打印 这项规定类似于注册官或副注册官等获授权人士对证书进行数字签名。实施数字签名的基本思想是了解: 1) 证书是由授权人数字签名的,并且该授权人或其他人是谁创建的,但没有此权限 2) 在注册官/副注册官对证书进行数字签名(以防止伪造)后,证书是否有任何更改 3) 文件是什么时候签署的,或者更改是什么时候完成的 我在这个主题上搜索了很多,但没有找到任何指导我如何做的教程。我从来没有听说过这个,但根据要求,我必须这样做。所以,请有人指导我或帮助我

我必须在证书中实现数字签名,我们在PHP中以PDF格式打印

这项规定类似于注册官或副注册官等获授权人士对证书进行数字签名。实施数字签名的基本思想是了解:

1) 证书是由授权人数字签名的,并且该授权人或其他人是谁创建的,但没有此权限

2) 在注册官/副注册官对证书进行数字签名(以防止伪造)后,证书是否有任何更改

3) 文件是什么时候签署的,或者更改是什么时候完成的


我在这个主题上搜索了很多,但没有找到任何指导我如何做的教程。我从来没有听说过这个,但根据要求,我必须这样做。所以,请有人指导我或帮助我如何在PHP中实现这一点。我必须在其中实现这一点的证书是

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

然而所有库都有一个共同的问题:安全保护签名者的数字证书,特别是证书的私钥

如果签署的PDF将被审计或提交给依赖方(接收者),而依赖方(接收者)希望确保PDF确实是由声称签署过PDF的人签署的,那么数字证书(和签名系统)必须是QSCD——合格的签名创建设备。(同一想法的旧名称是SSCD,“安全签名创建设备”。)


智能卡是制作QSCD的老方法。更现代的是使用集中式签名设备。我的公司DocuSign与an进行了合作,其他公司也进行了合作。

相关:关于使用javascript的基于浏览器的数字签名,请参考我的答案。对于PHP,可用的(免费)组件并不多。您可能想使用Java组件,通过Apache代理在Tomcat上运行JavaBridge,从浏览器USB令牌和服务器端的PHP对PDF进行数字签名。我已经研究了很多关于创建基于云的QSCD的内容,我知道您必须使用
openssl.*
来创建PKI,但现在我忘记了如何对文档进行实际签名,以及在文档签名时如何解密并确保其相同。另外,创建密钥后,如何将它们存储在
.pem
文件中?你有相关的教程可以帮助你吗?我不是为一个企业建立一个API,只是为了签署我个人发送给人们的任何东西(供个人使用),我将建立一个API,人们可以使用它来检查我是否确实签署了它。嗨@KDOT,你的问题需要一本书来回答。为什么不使用iText或竞争对手之类的库?或者通过我们的API使用DocuSign对文档进行数字签名。请参阅快速SBS产品。注意:我为DocuSign工作。我并不是真的希望出于法律原因使用QSCD,我只是想用签署证书的想法来验证它不是伪造的。这个想法是,一名工人可以申请他的职位证书,将其交给另一个机构,然后该机构可以使用API检查证书是否伪造。我不太确定我是否正确地掌握了QSCD的概念,如果我可以简单地将数据存储在数据库中,然后制作一个简单的API,但我也希望能够发布PDF证书,但话说回来,我如何确保位置不被篡改?@LarryK-为什么不使用DocuSign API?因为他们希望每个签署的文件3美元,即使你批量签署,每年12000美元(每月1000美元),他们希望收取32400美元,或每个发送的文件2.70美元。这太疯狂了。