Firma electr贸nica
Aunque es posible exportar las facturas sin firmarlas, es un paso obligatorio para pr谩cticamente cualquier tr谩mite relacionado con la Administraci贸n P煤blica. Para firmar facturas se necesita un certificado electr贸nico (generalmente expedido por la FNMT) del que extraer su clave p煤blica y su clave privada.
Firmado con clave p煤blica y privada X.509
Si se tienen las clave p煤blica y privada en archivos independientes se debe utilizar este m茅todo con los siguientes argumentos:
$fac->sign("clave_publica.pem", "clave_privada.pem", "passphrase");
NOTA
Los siguientes comandos permiten extraer el certificado (clave p煤blica) y la clave privada de un archivo PFX:
openssl pkcs12 -in certificado_de_entrada.pfx -clcerts -nokeys -out clave_publica.pem openssl pkcs12 -in certificado_de_entrada.pfx -nocerts -out clave_privada.pem
Firmado con PKCS#12
Desde la versi贸n 1.0.5 de Facturae-PHP ya es posible cargar un banco de certificados desde un archivo .pfx
o .p12
sin necesidad de convertirlo previamente a X.509:
$fac->sign("certificado.pfx", null, "passphrase");
NOTA
Al utilizar un banco PKCS#12, Facturae-PHP incluir谩 la cadena completa de certificados en la factura al firmarla.
Aunque en la mayor铆a de los casos esto no supone ninguna diferencia con respecto a firmar desde ficheros PEM, el validador del Gobierno de Espa帽a presenta problemas para verificar firmas de certificados expedidos recientemente por la FNMT. Dicho problema se soluciona cuando se incluyen los certificados ra铆z e intermedios de la Entidad de Certificaci贸n, por lo que es recomendable usar este m茅todo de firma con Facturae-PHP.
Fecha de la firma
Por defecto, al firmar una factura se utilizan la fecha y hora actuales como sello de tiempo. Si se quiere indicar otro valor, se debe utilizar el siguiente m茅todo:
$fac->setSignTime("2017-01-01T12:34:56+02:00");
NOTA
Cambiar manualmente la fecha de la firma puede entrar en conflicto con el sellado de tiempo.