(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
Сертификат X.509, который будет использован для подписи input_filename
. Смотрите параметры ключа/сертификата.
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; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR . |
8.0.0 | private_key теперь принимает экземпляр OpenSSLAsymmetricKey или OpenSSLCertificate; ранее принимался ресурс (resource) типа OpenSSL key or OpenSSL X.509 CSR . |
Пример #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");
}
?>