(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
openssl_pkcs7_sign — S/MIME メッセージに署名する
$input_filename
,$output_filename
,$certificate
,$private_key
,$headers
,$flags
= PKCS7_DETACHED
,$untrusted_certificates_filename
= null
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
には、 署名に含めるための他の一連の証明書を記述したファイル名を指定します。 これは、例えば送信者が使用した証明書を受信者が検証しやすくするために使用することが可能です。
バージョン | 説明 |
---|---|
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");
}
?>