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

?>