Sello.

 

El CFDI requiere el atributo sello, que avala la autenticidad de los datos contenidos en el archivo que enviamos al SAT.

* Para explicar el proceso, los siguientes ejemplos utilizan la herramienta openssl (Incluida en Linux y OS X. Para windows descargarla aquí).

Recursos previos:

  1. Cadena original (archivo .txt)
  2. Llave privada de certificado (archivo .key)
  3. Llave pública de certificado (archivo .cer)
  4. Contraseña de la llave privada (archivo .txt)

Secuencia de pasos:

  1. Generar la llave de firmado (archivo .pem)
  2. Firmar la cadena original
  3. Transformar la firma a base64

Para generar la llave de firmado (archivo .pem), ejecuta:

openssl pkcs8 -inform DET -in aaa010101aaa.key -passin pass:12345678a -out key.pem

Obtendrás un archivo key.pem que podrás usar en todos los firmados que realices con el mismo certificado.

* Este proceso solo deberás ejecutarlo una vez, cada que renueves el certificado.


Para firmar la cadena original, utiliza el archivo .pem (que acabas de generar) sobre la cadena original, aplicando el método de digestión SHA-1:

openssl dgst -sha1 -out sign.bin -sign key.pem cadena_ejemplo.txt

Obtendrás un archivo sign.bin de 20 bytes, que contiene la cadena original firmada con tu certificado.


Para integrarla al comprobante deberás transformarla a formato base64. Puedes hacerlo con este comando de lectura segura:

openssl enc -in sign.bin -a -A -out signB64.txt

Obtendrás un archivo signB64.txt que contiene el sello listo para colocarlo en el atributo "sello" del cfdi.

sello="qTzEwNUDvk/WpeFstpf/FLNmiHMxiL8pDTXGNb+DCFO0Z7SXMZJCim3JAlBw8Astvr0/jiVfo3WdWbaX88cC1l1+iipOLdedbFNHZUmsW86nC1YQHWw0S6mEiGH0ZxGa5KOl/1mrvPlDweeCiyYavNQeEuO1r0/ELobMi07w6ps="