openssl_pkcs7_sign

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

openssl_pkcs7_signFirma un mensaje S/MIME

Descripción

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() toma el contenido del fichero input_filename y lo firma utilizando el certificado y la clave privada contenidos en los argumentos certificate y private_key.

Parámetros

input_filename

El fichero de entrada que se tiene la intención de firmar digitalmente.

output_filename

El fichero donde se escribirá la firma digital.

certificate

El certificado X.509 utilizado para firmar digitalmente input_filename. Ver parámetros Clave/Certificado para una lista de valores válidos.

private_key

private_key es la clave privada correspondiente a certificate. Ver parámetros Clave Pública/Privada para una lista de valores válidos.

headers

headers es un array de encabezados que serán añadidos a los datos cifrados (ver la función openssl_pkcs7_encrypt() para más detalles sobre el formato del parámetro).

flags

flags puede ser utilizado para modificar la salida. Ver las constantes PKCS7.

untrusted_certificates_filename

untrusted_certificates_filename especifica el nombre del fichero que contiene un conjunto de certificados adicionales a incluir en la firma, los cuales podrán ayudar al destinatario a verificar los datos que se utilizan.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 certificate ahora acepta una instancia de OpenSSLCertificate ; anteriormente, se aceptaba un recurso de tipo OpenSSL X.509 CSR.
8.0.0 private_key ahora acepta una instancia de OpenSSLAsymmetricKey o OpenSSLCertificate ; anteriormente, se aceptaba un recurso de tipo OpenSSL key o OpenSSL X.509.

Ejemplos

Ejemplo #1 Ejemplo con openssl_pkcs7_sign()

<?php
// el mensaje que se quiere firmar, para que el destinatario esté seguro de que
// proviene de usted
$data = <<<EOD

Usted está autorizado a gastar 10 000€ en gastos de viaje.

El PDG
EOD;
// guardar el mensaje en un fichero
$fp = fopen("msg.txt", "w");
fwrite($fp, $data);
fclose($fp);
// cifrarlo
if (openssl_pkcs7_sign("msg.txt", "signed.txt", "file://mycert.pem",
array(
"file://mycert.pem", "mypassphrase"),
array(
"To" => "joes@example.com", // sintaxis con clave
"From: HQ <ceo@example.com>", // sintaxis indexada
"Subject" => "Eyes only")
)) {
// mensaje firmado - ¡envíelo!
exec(ini_get("sendmail_path") . " < signed.txt");
}
?>