【发布时间】:2016-11-07 15:11:26
【问题描述】:
我需要在 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 在答案中建议打开文件,获取内容并使用转换。
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 来解决我的问题吗?
提前非常感谢
如果您需要更多信息,请告诉我
【问题讨论】:
-
嗨,如果没有更多信息,很难在这里发表评论-当您说它不同时-您在哪里看到这种差异..?数据都在一条线上吗?数据是否显示正确的字符?您是否对私钥或 CER 和 KEY 都有问题?调用 der2pem 函数时,你在做什么?把它写到屏幕上?将其写入文件?将结果推送到其他变量?
-
嗨,当我转换我的私钥时,我得到了一个有效的文件来执行签名,但是当我使用 PHP 函数将结果转储到文件时,我得到了一个不同的字符串,在开始时类似,但是不同我要测试覆盖我的 CER 文件的功能
-
你可以分享你正在使用的例程吗?
-
我只是用 PHP 代码和 openssl 命令更新信息
-
我开始思考是因为我使用 pkcs8 和 openssl 来转换我的文件,这个过程给我的结果与 PHP 代码不同
标签: php openssl pki php-openssl