我正在为我的公司更新一个项目,其中有一个部分需要使用我们的证书文件对 pdf 进行数字签名。在这种情况下,我应该使用 PHP 的更新库来更改签署此 pdf 的脚本。
在旧代码中,我们使用另一个脚本来实现这一点,并且我们必须使用 .p12 文件 + 字符串。使用这个旧脚本,当您使用 Acrobat Reader DC 打开创建的 pdf 时,我们会得到下一张图像,您可以在其中看到“已签名且所有签名均有效”。
在新脚本中,我使用下一个示例:
https://tcpdf.org/examples/example_052/
为了能够将此示例与我的证书一起应用,我必须将我的 pfx 文件证书(“.p12”)转换为 2 种“.pem”,抛出以下命令行:
openssl pkcs12 -in myOldCertificate.p12 -clcerts -nokeys -out publicCert.pem -> 要求我“输入导入密码”
openssl pkcs12 -in myOldCertificate.p12 -nocerts -out privateKey_cert.pem -> 询问我“输入导入密码”以及“输入 PEM 密码短语”
最后,我只是更改了下载示例 52 中的第 89 行。
//设置文档签名
$pdf->setSignature('file:///var/www/html/publicCert.pem', 'file:///var/www/html/privateKey_cert.pem', 'xxxxxx', '', 2、$信息); -> 在“xxxxx”中,我编写了与导入密码相同的字符串,以防万一,PEM 密码短语也相同。
当我创建数字签名的 pdf 并使用 Acrobat Reader DC 打开它时,您可以看到下图:
我担心的是,因为我可以看到上面写着“由我公司认证”,看起来一切正常,但没有绿色勾号,我不确定它是否完全有效。您必须认为我需要最安全的方式来验证此 pdf 的真实性和完整性。
最佳答案
PDF 格式支持两种类型的用户签名:
- 批准签名和
- 认证签名。
认证签名除了签署文档外,还可以选择签名后允许对文档进行哪些更改;批准签名只是签名。
通常,文档的作者使用认证签名对其进行签名,以表明他是文档的作者,并且仅允许对其进行某些添加(例如表单填写)。然后,经过如此认证的文档将转发给其他各方(可能在填写表格后)使用批准签名签署文档,以表明他们批准文档内容(包括其添加内容)。
您的旧代码应用了批准签名,而新代码应用了认证签名,允许“仅进行表单填写、签名和页面添加操作”。
关于您的担忧
My worry is because I can see that says "Certified by My company certification" and seems all ok but there is not green tick and I'm not sure if it's completely valid.
除了上述差异外,认证签名与批准签名一样有效。作为签名状态栏图标含义的概述,请查看此处:
(此备忘单适用于Adobe Acrobat和Reader 9;同时认证丝带的颜色从蓝色变为黑色,但其含义仍然相同)
<小时/>如果您确实想返回批准签名,请尝试延长该行
$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info);
在示例代码中带有另一个参数
$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info, 'A');
这应该(乍一看 TCPDF 源)导致代码创建批准签名。
关于php - 此 pdf 数字签名正确吗? PHP/TCPDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51209229/