【问题标题】:Using DER formated Keys to sign documents on PHP使用 DER 格式的密钥在 PHP 上签署文档
【发布时间】: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 命令更新信息
  • 我开始思考是因为我使用 pkcs8openssl 来转换我的文件,这个过程给我的结果与 PHP 代码不同

标签: php openssl pki php-openssl


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 2015-03-19
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多