1

我需要在 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来解决我的问题吗?

非常感谢提前
让我知道您是否需要更多信息

4

1 回答 1

1

在没有看到您在做什么的情况下,我可以告诉您您拥有的功能有效。这很可能取决于一些事情,为什么它不适合你,如果没有更多信息,很难说清楚。

默认情况下,该函数会将您的数据转换为 base64 并添加“BEGIN CERTIFICATE”页眉和页脚 - 请注意,如果您正在调用该函数来处理私钥,则需要像这样调用它:

$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');
于 2016-07-05T17:55:54.983 回答