php签名出错是因为嵌入到文档中的签名容器超出了原来为它预留的大小,其解决方法就是为签名容器预留更多空间即可。

本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑

如何解决php 签名出错问题?

问题描述:

我正在使用 TCPDF 生成一个 pdf 文档并对其进行签名.TCPDF 本身只是调用 PHP 的 openssl_pkcs7_sign 函数,这在我看来是基于 源代码.

直到最近一切正常.然后我改变了证书提供者.我刚刚更新了私钥、证书和证书链:

$pdf->setSignature(
                $this->public_certificate_path, 
                $this->private_key_path, 
                $this->private_key_password, 
                $this->extra_certificates_path, 
                1);

我在 extra_certificates_path 文件中以 PEM 格式复制了新的根证书和中间证书.我使用 openssl 验证了这个文件,看起来不错.

现在,当我在 Adobe Reader 中打开已签名的 PDF 时,它会显示以下错误:

打开文件时,它说<块引用>
此文件已损坏但正在修复中
上面的蓝丝带说<块引用>
认证无效
当我打开签名面板时,它显示<块引用>
由 %s 认证
错误详情说<块引用>
此签名中包含的格式或信息有错误(支持信息:SigDict/Contents 非法数据)
当我点击"证书详细信息"时,没有任何反应?

解决办法:

分析OP共享的示例文件可以理解问题:嵌入到文档中的签名容器超出了原来为它预留的大小.

因此,解决方案是为签名容器预留更多空间.


如何解决php 签名出错问题