使用DER格式化密钥在PHP上签署文档

时间:2016-07-05 17:24:41

标签: php openssl pki php-openssl

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

提前多多谢谢 如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:1)

在没有看到你在做什么的情况下,我可以告诉你,你所拥有的功能是有效的。这很可能取决于为什么它不能为你工作而没有更多的信息,这很难说。

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

$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');