使用DER格式的密钥在PHP上签名文档

使用DER格式的密钥在PHP上签名文档,php,openssl,pki,php-openssl,Php,Openssl,Pki,Php Openssl,我需要在PHP上签署PDF文档,我使用的是TCPDF库 问题是my.CER和my.Key文件采用DER格式,如果采用这种格式,则函数可以加载私钥 如果我在终端上使用openssl命令将密钥从二进制DER格式转换为ASCII格式,一切都正常,但我不想使用exec函数通过PHP调用系统函数 经过一点研究,我发现了这个问题: 在其中一个问题上,建议打开文件,获取内容并使用转换 function der2pem($der_data, $type='CERTIFICATE') { $pem = c

我需要在PHP上签署PDF文档,我使用的是TCPDF库

问题是my.CER和my.Key文件采用DER格式,如果采用这种格式,则函数可以加载私钥

如果我在终端上使用openssl命令将密钥从二进制DER格式转换为ASCII格式,一切都正常,但我不想使用exec函数通过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\u pkcs7\u 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;
}

对此有什么解释吗?
正确的方法是什么?
我应该使用exec来解决我的问题吗?

提前非常感谢

如果您需要更多信息,请告诉我,我可以告诉您,您在那里的功能可以正常工作。这很可能取决于一些事情,比如为什么它对你不起作用,如果没有更多的信息,就很难说了

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

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

嗨,如果没有更多的信息,很难在这里发表评论-当你说这是不同的-你在哪里看到了这种差异。。?数据都在一行吗?数据显示的字符是否正确?您的私钥或CER和密钥都有问题吗?调用der2pem函数后,您将如何处理它?把它写到屏幕上?将其写入文件?将结果推送到其他变量?嗨,当我转换私钥时,我得到了一个有效的文件来执行签名,但当我使用PHP函数将结果转储到文件时,我得到了一个不同的字符串,开始时类似但不同我将测试转换我的CER文件的函数你能分享你正在使用的例程吗?我只是用PHP代码和openssl命令更新信息我开始思考是因为我使用pkcs8和openssl转换我的文件,这个过程给我的结果与PHP代码不同
$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');