openssl_pkcs7_sign

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

openssl_pkcs7_signПодписать сообщение S/MIME

Описание

openssl_pkcs7_sign ( string $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" => "joes@example.com"// ассоциативный синтаксис
          
"From: HQ <ceo@example.com>"// индексированный синтаксис
          
"Subject" => "Представительские расходы")
    )) {
    
// сообщение подписано - отправляем!
    
exec(ini_get("sendmail_path") . " < signed.txt");
}
?>