(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
или 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");
}
?>