(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
Файл, который нужно подписать.
outfilename
Файл, в который будет записана цифровая подпись.
signcert
Сертификат X.509, который будет использован для подписи. См. параметры ключа/сертификата.
privkey
privkey
задается секретным ключем, соответствующим сертификату.
См. параметры открытого/секретного ключа.
headers
headers
задается массивом заголовков,
которые будут добавлены в начало данных после подписания. (см. openssl_pkcs7_encrypt()
для получения дополнительной информации о формате этого параметра).
flags
flags
используется для настройки вывода. См. константы PKCS7.
extracerts
extracerts
может содержать имя файла,
в котором хранятся дополнительные сертификаты для добавления их
к подписи, например для облегчения верификации подписи разными пользователями.
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #1 Пример использования openssl_pkcs7_sign()
<?php
// сообщение, которое вы хотите подписать для того, чтобы получатели могли
// проверить, что его послали именно вы
$data = <<<EOD
Разрешаю потратить на обед с контрагентом не более 100,000 рублей.
Ваш директор.
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" => "Представительские расходы")
)) {
// сообщение подписано - отправляем!
exec(ini_get("sendmail_path") . " < signed.txt");
}
?>