openssl_pkcs7_sign

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

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

Описание

openssl_pkcs7_sign(
    string$input_filename,
    string$output_filename,
    OpenSSLCertificate|string$certificate,
    OpenSSLAsymmetricKey|OpenSSLCertificate|array|string$private_key,
    ?array$headers,
    int$flags = PKCS7_DETACHED,
    ?string$untrusted_certificates_filename = null
): bool

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.0certificate теперь принимает экземпляр OpenSSLCertificate; ранее принимался ресурс (resource) типа OpenSSL X.509 CSR.
8.0.0private_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");
}
?>
To Top