我需要在PHP上签署PDF文档,我正在使用TCPDF库来执行此操作
问题是我的 .CER ,我的 .Key 文件采用 DER 格式, openssl_pkcs7_sign()如果是这种格式,函数可以加载私钥
如果我在终端上使用openssl命令将我的密钥从二进制 DER 格式转换为 ASCII ,一切正常但我不想使用 exec < / strong>通过PHP调用系统函数的函数。
经过一番研究后我发现了这个问题: Load a .key file from DER format to PEM with PHP 在答案提出打开文件,获取内容并使用转换。
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 来解决我的问题吗?
提前多多谢谢 如果您需要更多信息,请告诉我
答案 0 :(得分:1)
在没有看到你在做什么的情况下,我可以告诉你,你所拥有的功能是有效的。这很可能取决于为什么它不能为你工作而没有更多的信息,这很难说。
默认情况下,该功能会将您的数据转换为base64并添加&#34; BEGIN CERTIFICATE&#34;页眉和页脚 - 请注意,如果您要调用该函数来处理私钥,则需要像这样调用它:
$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');