我需要在 PHP 上签署 PDF 文档,我正在使用 TCPDF 库来做
问题是我的.CER和我的.Key文件是DER格式,如果是这种格式,openssl_pkcs7_sign()函数可以加载私钥
如果我在终端上使用 openssl 命令将密钥从二进制DER格式转换为ASCII ,一切正常,但我不想使用exec函数通过 PHP 调用系统函数。
经过一点研究,我发现了这个问题: Load a .key file from DER format to PEM with PHP On 答案建议打开文件,获取内容并使用转换。
function der2pem($der_data, $type='CERTIFICATE') {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n";
return $pem;
}
但是当我使用这个函数来转换我的数据时,结果与控制台上由openssl生成的文件不同,并且函数openssl_pkcs7_sign()再次向我抛出错误
更新
这是我转换文件的 PHP 代码:
<?php
$myKey = 'p-key.key';
$private_key = file_get_contents($myKey);
echo der2pem($private_key,'PRIVATE KEY');
file_put_contents('p-key.key.pem', der2pem($private_key,'PRIVATE KEY'));
function der2pem($der_data, $type = 'CERTIFICATE')
{
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n";
return $pem;
}
这是我的openssl命令:
openssl pkcs8 -in p-key.key -out p-key.key.pem -inform DER -outform PEM
对此有解释吗?
正确的方法是如何做到的?
我应该使用exec来解决我的问题吗?
非常感谢提前
让我知道您是否需要更多信息