Ejemplo openssl_pkcs7_sign y openssl_pkcs7_verify

Ejemplo 1

Descripción

Este programa recupera el contenido de un archivo de texto, supuestamente un mensaje que va a enviarse a una o más personas, y lo firma utilizando un certificado X509 y su clave privada asociada. A continuación verifica esa firma, operación ésta que llevaría a cabo el receptor del mensaje.

pkcs7sign.png

Código

<?php
  // Se lee el certificado con el que va a firmarse el mensaje
  $Cert = openssl_x509_read('file://tmp/certx509.pem');
  // Se obtiene la clave privada asociada al certificado
  $Clave = openssl_pkey_get_private('file://tmp/privada.pem','micontrasena');
 
  // y se usa para firmar el contenido del archivo mensaje.txt
  openssl_pkcs7_sign('tmp/mensaje.txt','tmp/firmado.txt',$Cert, $Clave, array());
 
  // Se recupera el mensaje original y el firmado para mostrarlos
  $Mensaje = file_get_contents('tmp/mensaje.txt');
  $Firmado = file_get_contents('tmp/firmado.txt');
?>
 
<h3>Mensaje original</h3>
<p><?= $Mensaje ?></p>
<h3>Mensaje firmado</h3>
<textarea cols='70' rows='15'><?= $Firmado ?></textarea>
 
<?php
  // Se verifica el mensaje que supuestamente se ha recibido, obteniendo el
  // certificado del remitente y el mensaje limpio
  if(openssl_pkcs7_verify('tmp/firmado.txt',PKCS7_NOVERIFY,'tmp/cerfirma.pem',
                          array(),'tmp/certx509.pem','tmp/msgsinfirma.txt')) 
    print "<p>La firma se verifica satisfactoriamente</p>";
  else
    print "<p>Fallo en la verificación de la firma</p>";
 
  // Liberación del certificado y la clave
  openssl_x509_free($Cert);
  openssl_pkey_free($Clave);
 
?>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License