openssl_pkcs7_sign

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

openssl_pkcs7_signAssina uma mensagem S/MIME

Descrição

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() pega o conteúdo do arquivo chamado input_filename e o assina usando o certificado informado em certificate e sua chave privada correspondente especificada por private_key.

Parâmetros

input_filename

O arquivo de entrada a ser assinado digitalmente.

output_filename

O arquivo no qual a assinatura digital será gravada.

certificate

O certificado X.509 usado para assinar digitalmente input_filename. Consulte Parâmetros de chave/certificado para obter uma lista de valores válidos.

private_key

private_key é a chave privada correspondente ao certificate. Consulte Parâmetros de chave pública/privada para obter uma lista de valores válidos.

headers

headers é um array de cabeçalhos que serão anexados aos dados após serem assinados (veja openssl_pkcs7_encrypt() para mais informações sobre o formato deste parâmetro).

flags

flags são opções que podem ser usadas para alterar a saída - veja as constantes PKCS7.

untrusted_certificates_filename

untrusted_certificates_filename especifica o nome de um arquivo contendo vários certificados extras para incluir na assinatura que pode, por exemplo, ser usado para ajudar o destinatário a verificar o certificado que você usou.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 certificate agora aceita uma instância de OpenSSLCertificate; anteriormente, um resource do tipo OpenSSL X.509 CSR era aceito.
8.0.0 private_key agora aceita uma instância de OpenSSLAsymmetricKey ou de OpenSSLCertificate; anteriormente, um resource do tipo OpenSSL key ou OpenSSL X.509 CSR era aceito.

Exemplos

Exemplo #1 Exemplo de openssl_pkcs7_sign()

<?php
// a mensagem que se deseja assinar para que o destinatário possa ter certeza de que
// foi você quem a enviou
$data = <<<EOD

Você tem minha autorização para gastar R$ 10 mil em despesas de jantar.

O Presidente
EOD;
// salva mensagem em arquivo
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
// criptografa o arquivo
if (openssl_pkcs7_sign("msg.txt", "assinado.txt", "file://meu_certificado.pem",
array(
"file://meu_certificado.pem", "minha_senha"),
array(
"To" => "fulanodetal@example.com", // sintaxe de chaves
"From: HQ <presidente@example.com>", // sintaxe de índice
"Subject" => "Ultra secreto")
)) {
// mensagem assinada - enviando!
exec(ini_get("sendmail_path") . " < assinado.txt");
}
?>