# Firma digital

PHP FacturaE soporta firma digital con XAdES-EPES conforme a la política de firma FacturaE v3.1.

Certificados PKCS#12 (.pfx / .p12)

use PhpFacturae\Signer;
$signer = Signer::pfx('certificado.pfx', 'miPasswordSeguro');
$invoice->sign($signer);

Certificados PEM

$signer = Signer::pem(
certPath: 'certificado.pem',
keyPath: 'clave-privada.pem',
passphrase: 'passwordClave'
);

Sellado de tiempo (TSA)

$signer = Signer::pfx('certificado.pfx', 'password')
->timestamp('https://freetsa.org/tsr');

Con autenticación:

->timestamp(
url: 'https://tsa.ejemplo.com/tsr',
user: 'miUsuario',
password: 'miPassword'
)

Detalles criptográficos

  • Canonicalización: C14N (Canonical XML 1.0)
  • Algoritmo de resumen: SHA-256
  • Algoritmo de firma: RSA-SHA256
  • Transformación: Firma envolvente (enveloped signature)

Conversión de certificados

# PEM a PKCS#12
openssl pkcs12 -export -in certificado.pem -inkey clave-privada.pem -out certificado.pfx
# PKCS#12 a PEM
openssl pkcs12 -in certificado.pfx -out certificado.pem -nodes
# Eliminar passphrase de clave PEM
openssl rsa -in clave-cifrada.pem -out clave-descifrada.pem

Verificar firmas

xmlsec1 --verify factura-firmada.xml