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,
    #[\SensitiveParameter] 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.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");
}

?>