Подписывает сообщение S/MIME

# openssl_pkcs7_sign

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

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

### Описание

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

    ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open