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
を使用する必要がありますか?
事前にどうもありがとうございました
。さらに情報が必要な場合はお知らせください