2016-07-05 121 views
1

签署文件,我需要签署关于PHP的PDF文档,我使用TCPDF库做使用DER格式化键对PHP

问题是我的.CER。重点文件在DER格式和openssl_pkcs7_sign()功能可如果是这种格式加载私钥

如果我用我的终端上OpenSSL的命令,我的钥匙由二进制DER格式转换为一个SCII一切正常,但我不想使用exec函数通过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()生成的文件不同再次抛出我的错误

UPDATE
这是我的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

嗨,没有更多的信息,这里很难评论 - 当你说这是不同的 - 你在哪里看到这种差异..?数据全部在一行上吗?数据是否显示正确的字符?您是否在使用私钥或CER和KEY时遇到问题?在调用der2pem函数时你在做什么?写它到屏幕?写入文件?把结果推到一些其他变量? – Damien

+0

嗨,当我转换我的私钥我得到了一个有效的文件来执行该标志,但是当我使用PHP函数转储文件上的结果我得到了一个不同的字符串,类似的开始,但不同 我要去测试功能转换我的CER文件 – Mirdrack

+0

你能分享你正在使用的例程吗? – Damien

回答

1

没有看到你在做什么,我可以告诉你,你具备的功能有工作。它可能很大程度上取决于几件事情,为什么它不适合你,没有更多的信息,这将很难说。

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

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