很好地使用证书来签署PDF

很好地使用证书来签署PDF,pdf,openssl,certificate,sign,Pdf,Openssl,Certificate,Sign,我正在尝试用证书在PHP脚本中签署PDF。到目前为止,我使用命令行生成的自签名.crt文件执行测试: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 \ -keyout tcpdf.crt -out tcpdf.crt (是的,我正在使用tcpdf)。它很好用 但我知道,我的公司给了我真正的证书(来自tbs证书),我有点失望:我有一个.cer、一个.pem和一个.p7b文件 我试图在我的脚本中使用它们,但我发

我正在尝试用证书在PHP脚本中签署PDF。到目前为止,我使用命令行生成的自签名.crt文件执行测试:

openssl req -x509 -nodes -days 365000 -newkey rsa:1024 \
            -keyout tcpdf.crt -out tcpdf.crt
(是的,我正在使用tcpdf)。它很好用

但我知道,我的公司给了我真正的证书(来自tbs证书),我有点失望:我有一个.cer、一个.pem和一个.p7b文件

我试图在我的脚本中使用它们,但我发现了错误

Warning: openssl_pkcs7_sign(): error getting private key
我与自签名证书一起使用的代码:

// set certificate file
$certificate = 'file://data/cert/tcpdf.crt';

// set document signature
$pdf->setSignature($certificate, $certificate);

我可以换些东西吗?我对加密世界不太熟悉…

首先,您必须将脚本指向现有文件。在本例中,.cer文件将包含证书,因此请尝试使用该文件而不是“/path/file.CRT”


现在,文件扩展名与证书的编码方式恐怕有点无关,即使名称会引起一些混淆,请参见

由于缺乏文档,我不知道tcpdf是否同时支持pem和der编码文件。他们可能会,但以防万一,这里有一些解决方法。如果假设编码错误,测试命令将给您一个“无法加载证书”错误

  • 测试pem编码文件:
    openssl x509-in cert.cer-text-noout
  • 测试der编码文件:
    opensslx509-in certificate.der-notify der-text-noout
  • 从PEM到DER的转换
    openssl x509-in cert.cer-outform DER-out cert.DER
  • 从DER到PEM的转换
    openssl x509-in cert.cer-通知DER-outform PEM-out cert.PEM

感谢您的链接,非常有用。然而,我也有同样的问题。通过测试命令,我发现我的.cer和.pem文件都是pem编码的。我的crt自我签名也一样。所以,我尝试使用.cer而不是.crt,但我有同样的问题。。。