2

PHP で pkcs7 を使用して電子メールに署名する方法に関するドキュメントについては、以前に生成された証明書を使用する必要があります。

openssl でこの例に必要なファイルを正確に生成するコマンドは何ですか? http://www.php.net/manual/it/function.openssl-pkcs7-sign.php

<?php
// the message you want to sign so that recipient can be sure it was you that
// sent it
$data = <<<EOD

You have my authorization to spend $10,000 on dinner expenses.

The CEO
EOD;
// save message to file
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
// encrypt it
if (openssl_pkcs7_sign("msg.txt", "signed.txt", "mycert.pem",
    array("file://mycert.pem", "mypassphrase"),
    array("To" => "joes@example.com", // keyed syntax
          "From: HQ <ceo@example.com>", // indexed syntax
          "Subject" => "Eyes only")
    )) {
    // message signed - send it!
    exec(ini_get("sendmail_path") . " < signed.txt");
}
?>

よろしくお願いします。

編集1:

$prepend = "file:/";
openssl_pkcs7_sign($prepend . realpath(dirname(__FILE__)) . "/text.txt",
$prepend . realpath(dirname(__FILE__)) . "/enc.txt",
$prepend . realpath(dirname(__FILE__)) . "/selfcert.pem",
array($prepend . realpath(dirname(__FILE__)) . "/enc_key.pem", "123456"),
$headers);

コマンドで証明書ファイルを生成しました

openssl req -x509 -days 365 -newkey rsa:1024 -keyout enc_key.pem -out selfcert.pem

それでもエラーが発生します:

警告: openssl_pkcs7_sign(): 秘密鍵の取得中にエラーが発生しました...

編集2:先頭に追加

もしかしたら、「前撮り」と関係があるのでしょうか?問題がファイルの取得にあるのか、キー自体にあるのかはよくわかりません。

4

1 に答える 1

4

自力で解決しました。問題は、キーを正しく取得することでした。だから、その問題に直面しているすべての人のために:

$prepend = "file://";
openssl_pkcs7_sign(realpath(dirname(__FILE__)) . "/text.txt",
        realpath(dirname(__FILE__)) . "/enc.txt",
        $prepend . realpath(dirname(__FILE__)) ."/selfcert.pem",
        array($prepend . realpath(dirname(__FILE__)) ."/enc_key.pem", "123456"), $headers);
于 2013-03-06T05:14:34.380 に答える