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