【发布时间】:2020-06-28 17:49:07
【问题描述】:
我在 Win 10/PHP 7.3/Laravel 上,我正在尝试使用以下生成的证书文件签署 PDF:
openssl genrsa -out my-private-key.pem 2048
openssl req -new -key my-private-key.pem -x509 -days 3650 -out my-public-key.pem
但是当我打开bearing_signed.pdf 时,它不包含签名。以下是我目前正在使用的代码块:
openssl_pkcs7_sign(
$app_path . 'bearing.pdf',
$app_path . 'bearing_signed.pdf',
"file://" . $app_path . "my-public-key.pem",
array("file://" . $app_path . "my-private-key.pem", ""),
array(
"To" => $to_email,
"From" => env('MAIL_FROM_NAME') . '<' . env('MAIL_FROM_ADDRESS') . '>',
"Subject" => $data['subject']
),
PKCS7_BINARY
);
// convert PEM to DER
$pem_data = file_get_contents($app_path . 'bearing_signed.pdf');
$begin = "Content-Transfer-Encoding: base64";
$pem_data = trim(substr($pem_data, strpos($pem_data, $begin) + strlen($begin)));
$der = base64_decode($pem_data);
$fp = fopen($app_path . 'bearing_signed.pdf', "w");
if ($fp) {
fwrite($fp, $der);
fclose($fp);
}
这段代码有什么问题?
【问题讨论】:
-
一般情况下,需要签署 PDF 的不是使用自签名证书,而是使用认证机构颁发的证书...如果对您有用,请参考SO answer...