(PHP 4 >= 4.0.6, PHP 5, PHP 7)
openssl_pkcs7_sign — S/MIME メッセージに署名する
$infilename
, string $outfilename
, mixed $signcert
, mixed $privkey
, array $headers
[, int $flags
= PKCS7_DETACHED
[, string $extracerts
]] ) : bool
openssl_pkcs7_sign() は
infilename
という名前のファイルの内容を取得し、
パラメータ signcert
と privkey
で
指定した証明書とそれに対応する秘密鍵を用いて署名します。
infilename
The input file you are intending to digitally sign.
outfilename
The file which the digital signature will be written to.
signcert
The X.509 certificate used to digitally sign infilename. See Key/Certificate parameters for a list of valid values.
privkey
privkey
is the private key corresponding to signcert.
See Public/Private Key parameters for a list of valid values.
headers
headers
は、ヘッダの配列です。このヘッダは、
署名された後でデータの前に付加されます (このパラメータの形式の詳細については
openssl_pkcs7_encrypt() を参照ください)。
flags
flags
を出力を変更するために使用することが可能です。
PKCS7 定数
を参照ください。
extracerts
extracerts
には、
署名に含めるための他の一連の証明書を記述したファイル名を指定します。
これは、例えば送信者が使用した証明書を受信者が検証しやすくするために使用することが可能です。
成功した場合に TRUE
を、失敗した場合に FALSE
を返します。
例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" => "[email protected]", // 連想配列の構文
"From: HQ <[email protected]>", // 添字配列の構文
"Subject" => "Eyes only")
)) {
// メッセージは署名されました。送信しましょう!
exec(ini_get("sendmail_path") . " < signed.txt");
}
?>