1

PHP で PDF ドキュメントに署名する必要があります。TCPDF ライブラリを使用しています。

問題は、.CER.KeyファイルがDER形式であり、openssl_pkcs7_sign()関数がこの形式の場合に秘密鍵をロードできることです。

端末で openssl コマンドを使用してキーをバイナリDER形式からASCIIに変換すると、すべてが機能しますが、 exec関数を使用して PHP 経由でシステム関数を呼び出したくありません。

少し調査した後、私はこの質問を見つけました: .key ファイルを DER 形式から PEM に PHP でロードする回答の 1 つでは 、ファイルを開いてコンテンツを取得し、変換を使用することを提案しています。

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
を使用する必要がありますか?

事前にどうもありがとうございました
。さらに情報が必要な場合はお知らせください

4

1 に答える 1

1

あなたが何をしているのか見なくても、そこにある機能が機能していると言えます。なぜそれが機能しないのかについては、いくつかのことに依存している可能性があり、それ以上の情報がなければ、それを伝えるのは難しいでしょう.

デフォルトでは、その関数はデータを base64 に変換し、「BEGIN CERTIFICATE」ヘッダーとフッターを追加します。秘密鍵を処理するためにその関数を呼び出す場合は、次のように呼び出す必要があることに注意してください。

$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');
于 2016-07-05T17:55:54.983 に答える