【问题标题】:Is this pdf digital signed correctly? PHP/TCPDF这个 pdf 数字签名是否正确? PHP/TCPPDF
【发布时间】:2018-12-14 23:51:16
【问题描述】:

我正在为我的公司更新一个项目,其中有一个部分我们需要使用我们的证书文件对 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 的真实性和完整性。

【问题讨论】:

  • 对我的问题投了反对票的直觉,能否请评论一下为什么他认为这是一个糟糕的问题?

标签: php pdf openssl digital-signature tcpdf


【解决方案1】:

PDF 格式支持两种类型的用户签名:

  • 批准签名和
  • 认证签名。

认证签名除了签署文件外,还选择在签署后允许对文件进行哪些更改;批准签名只是签名。

通常,文档的作者使用认证签名对其进行签名,以表明他是文档的作者,并且只允许对其进行某些添加(例如表格填写)。然后将经过如此认证的文件转发给其他方(可能在填写表格后)使用批准签名在文件上签名,以表明他们批准文件内容,包括他们的补充。

您的旧代码应用了批准签名,而您的新代码应用了认证签名,允许“仅表单填写、签名和页面添加操作”。

关于您的担忧

我担心是因为我可以看到“由我的公司认证”,看起来一切正常,但没有绿色勾号,我不确定它是否完全有效。

除上述不同外,认证签名与批准签名一样有效。作为签名状态栏图标含义的概述,请看这里:

(此备忘单适用于 Adob​​e Acrobat 和 Reader 9;同时认证色带的颜色已由蓝色变为黑色,但含义仍然相同)


如果您严格要返回批准签名,请尝试延长该行

$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info);

在示例代码中用另一个参数来

$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info, 'A');

这应该(乍一看 TCPDF 来源)导致代码创建批准签名。

【讨论】:

  • 这是一个正确的答案...非常感谢mkl!
  • Ricard - 您认为这适用于 Adob​​e Sign 流程吗?我们使用 FPDF 或 MPDF(但不是 TCPDF),但我认为两者都不允许签名插入。
  • 最后我没有使用 TCPDF。我终于使用 setasign 了。它涵盖了所有版本的 pdf,并且工作起来非常简单,但您必须付费。 stackoverflow.com/questions/51248847/…
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2018-10-22
  • 2019-12-05
相关资源
最近更新 更多