S/MIME メッセージに署名する

# openssl_pkcs7_sign

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

openssl_pkcs7_sign — S/MIME メッセージに署名する

### 説明

function openssl_pkcs7_sign(
string `$input_filename`,
string `$output_filename`,
OpenSSLCertificate|string `$certificate`,
#[\SensitiveParameter]OpenSSLAsymmetricKey|OpenSSLCertificate|array|string `$private_key`,
?array `$headers`,
int `$flags` = `PKCS7_DETACHED`,
?string `$untrusted_certificates_filename` = `null`
): bool

openssl_pkcs7_sign() は `input_filename` という名前のファイルの内容を取得し、 パラメータ `certificate` と `private_key`で 指定した証明書とそれに対応する秘密鍵を用いて署名します。

### パラメータ

`input_filename`

  デジタル署名したい入力ファイル

`output_filename`

  デジタル署名が書き出されるファイル

`certificate`

  `input_filename` に電子署名するために使う X.509 証明書。 有効な値のリストは、 キー/証明書パラメータ を参照ください。

`private_key`

  `private_key` は、`certificate` に対応する秘密鍵です。 有効な値のリストは、 公開鍵/秘密鍵 のパラメータ を参照ください。

`headers`

  `headers` は、ヘッダの配列です。このヘッダは、 署名された後でデータの前に付加されます (このパラメータの形式の詳細については openssl_pkcs7_encrypt() を参照ください)。

`flags`

  `flags` を出力を変更するために使用することが可能です。 PKCS7 定数 を参照ください。

`untrusted_certificates_filename`

  `untrusted_certificates_filename` には、 署名に含めるための他の一連の証明書を記述したファイル名を指定します。 これは、例えば送信者が使用した証明書を受信者が検証しやすくするために使用することが可能です。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### 変更履歴

バージョン | 説明
--- | ---
8.0.0 | `certificate` は、 OpenSSLCertificate クラスのインスタンスを受け入れるようになりました。 これより前のバージョンでは、 `OpenSSL X.509 CSR` 型のリソースを受け入れていました。
8.0.0 | `private_key` は、 OpenSSLAsymmetricKey または OpenSSLCertificate クラスのインスタンスを受け入れるようになりました。 これより前のバージョンでは、 `OpenSSL key` または `OpenSSL X.509 CSR` 型のリソースを受け入れていました。

### 例

例1 openssl_pkcs7_sign() の例

    <?php
    // 受信者が送信者を確認できるように署名したいメッセージ
    $data = <<<EOD

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

    The CEO
    EOD;
    // ファイルにメッセージを保存
    $fp = fopen("msg.txt", "w");
    fwrite($fp, $data);
    fclose($fp);
    // 暗号化
    if (openssl_pkcs7_sign("msg.txt", "signed.txt", "file://mycert.pem",
        array("file://mycert.pem", "mypassphrase"),
        array("To" => "joes@example.com", // 連想配列の構文
              "From: HQ <ceo@example.com>", // 添字配列の構文
              "Subject" => "Eyes only")
        )) {
        // メッセージは署名されました。送信しましょう!
        exec(ini_get("sendmail_path") . " < signed.txt");
    }
    ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open