使用 PHP / Symfony / TCPDF 对 PDF 进行数字签名

Digital sign a PDF with PHP / Symfony / TCPDF

我正在尝试签署一个 pdf 抛出示例来自“https://tcpdf.org/examples/example_052/

我的证书文件扩展名为“.p12”而不是“.crt”。所以我更改了引用证书的 77 行。

$证书='file://data/cert/tcpdf.crt'; -> $证书 = 'file://data/cert/myCertificate.p12';

另外我改变的是第 88 行 setSignature 函数中的第三个参数。第三个参数是 "private_key_password",我将关联的密码添加到 private_key。 (我也尝试过不改变这个值)

但是,结果创建了一个 pdf,但 Adob​​e Acrobat Reader 通知 "The validity of the document certification is UNKONOWN" 并且如果您尝试阅读 Adob​​e 中的 "Signature Details"->"Certificate Details..." Acrobat Reader 程序意外结束。显然,数字签名不适用于 pdf。

知道会发生什么吗?非常感谢。

为了能够将此示例与我的证书一起应用,我必须将我的 pfx 文件证书 (".p12") 转换为 2 种 ".pem" 抛出以下命令行:

openssl pkcs12 -in myOldCertificate.p12 -clcerts -nokeys -out publicCert.pem -> 问我 "Enter Import Password"

openssl pkcs12 -in myOldCertificate.p12 -nocerts -out privateKey_cert.pem -> 问我 "Enter Import Password" 以及 "Enter PEM pass phrase"

所以最后,我只是从下载的示例 52 中更改了第 89 行。

//设置文档签名

$pdf->setSignature('file:///var/www/html/publicCert.pem', 'file:///var/www/html/privateKey_cert.pem', 'xxxxxx', '', 2, $info);

在 'xxxxx' 中,我写了与导入密码相同的字符串,为了以防万一,PEM 密码也相同。