Generar Sello

¿Qué es el sello?

El sello es el resultado de la firma de la cadena original del CFDI en base64, tiene como propósito emitir comprobantes, acreditar al creador, autenticar y dar integridad al mismo.

Para poder generar el sello es necesaria la cadena original del comprobante a sellar, así como los certificados de sello digital (*.cer y *.key).

Nota: No confundir estos certificados con la e.firma (FIEL)

Para poder generar el sello es necesario contar con los siguientes elementos:

  • Cadena Original del XML a sellar
  • Certificado de Sello Digital en formato PEM y su correspondiente llave privada también en formato PEM.
  • Algoritmos de criptografía para la generación de la Digestión o Hash.
  • Utilerías o funciones de criptografía (por ej. OpenSSL)

¿Qué es la cadena original?

Se entiende como cadena original a la secuencia de datos formada con la información contenida dentro del comprobante, está bajo la norma del estándar Anexo 20.

Reglas para generar la cadena original

  • Al inicio y al finalizar la cadena original se encuentra marcado mediante una secuencia de caracteres || (doble pleca).
  • Se debe de expresar únicamente la información del dato sin expresar el atributo al que hace referencia. Es decir, si el valor de un campo es “A” y el nombre del campo es “Concepto”, sólo se expresa |A| y nunca |Concepto A|.
  • Cada dato individual se debe separar de su dato subsiguiente, en caso de existir, mediante un carácter | (pleca sencilla).
  • Los espacios en blanco que se presenten dentro de la cadena original son tratados de la siguiente manera:
    • Se deben de reemplazar todos los tabuladores, retornos de carro y saltos de línea por el carácter espacio (ASCII 32).
    • Acto seguido se elimina cualquier espacio al principio y al final de cada separador | (pleca).
    • Finalmente, toda secuencia de caracteres en blanco se sustituye por un único carácter espacio (ASCII 32).
  • Los datos opcionales no expresados, no aparecen en la cadena original y no tienen delimitador alguno.
  •  Toda la cadena original se expresa en el formato de codificación UTF-8.
  • El nodo o nodos adicionales se integra a la cadena original como se indica en la secuencia de formación en su numeral 10, respetando la secuencia de formación y número de orden del Complemento:Concepto.
  • El nodo o nodos adicionales se integra al final de la cadena original respetando la secuencia de la formación para cada complemento y número de orden del Complemento

¿Cómo generar la cadena original para CFDI 4.0?

Para poder extraer la cadena original de un XML (CFDI) es necesario hacer uso de un lenguaje de transformación de documentos como lo es el XSLT, en este caso nos permite obtener/trasnsformar la información contenida en el XML a una cadena de texto, con la secuencia de datos y lineamientos que la plantilla de Secuencia de CadenaOriginal (XSLT) del SAT especifica.

Secuencia de Cadena Original (XSLT) http://www.sat.gob.mx/sitio_internet/cfd/4/cadenaoriginal_4_0/cadenaoriginal_4_0.xslt

Los elementos que debemos de considerar para la extracción de la cadena original son los siguientes:

Para poder utilizar la herramienta XSLT, solo es necesario copiar y pegar el contenido del XML, en el recuadro donde lo indique y en el segundo cuadro se estará agregando el contenido del XSLT es decir secuencia de la cadena original.

Es importante mencionar que la cadena original se debe de extraer la misma cantidad de veces que dicho comprobante de CFDI sufra algún cambio.

El resultado de la extracción de la cadena original quedaría de la siguiente manera, el cual estaremos guardando en un archivo, en este paso para efecto del ejemplo le pondremos como nombre “cadena_original.txt”:

||4.0|MX|63893|2023-02-22T11:42:38|30001000000400002434|0|XXX|0|P|01|21090|EKU9003173C9|ESCUELA KEMPER URGATE|601|MICV9209288D2|VIANEY OMARA MIRANDA CASTRO|83556|612|CP01|84111506|1|ACT|Pago|0|0|01|2.0|13072.82|1045.83|94794.07|0.00|109086.61|2023-02-20T12:00:00|03|MXN|1|109086.61|63893|BMN930209927|0113054288|ACF0BEF4-4509-46CC-99EB-4C8F71C20B40|ML|265419|MXN|1|2|109086.61|109086.61|0.00|02|161.086413|003|Tasa|0.080000|12.886913|13072.820532|002|Tasa|0.080000|1045.825643|94794.069918|002|Tasa|0.000000|0.000000|13072.820532|002|Tasa|0.080000|1045.825643|94794.069918|002|Tasa|0.000000|0.000000|161.086413|003|Tasa|0.080000|12.886913||

¿Cómo generar el sello para CFDI 4.0?

Para la generación del sello digital de los comprobantes CFDI’s tal como lo especifica el Anexo 20 en el inciso I Sección B es necesario utilizar alguno de los siguientes algoritmos:

  • SHA-2 o SHA-256, para el sellado del Comprobante Fiscal Digital a través de Internet.

A continuación, mostraremos una serie de pasos a seguir para poder obtener la digestión, utilizando los comandos de OpenSSL.

Nota: Para este paso es necesario contar previamente con la cadena original ya que esta se requiere para poder generar el sello final, para efectos de este ejemplo asumiremos que guardamos la cadena original en el archivo de texto con nombre “cadena_original.txt”.

Paso 1.- Convertir el certificado en formato PEM

openssl x509 -in "CSD_Escuela_Kemper_Urgate_EKU9003173C9_20190617_131753s.cer" -inform DER -out "EKU9003173C9.cer.pem" -outform PEM

Paso 2.- Convertir la llave privada en formato PEM

openssl pkcs8 -inform DER -in "CSD_Escuela_Kemper_Urgate_EKU9003173C9_20190617_131753.key" -passin pass:12345678a -out "EKU9003173C9.key.pem"

Paso 3.- Generar la Digestión haciendo uso de la cadena original previamente guardada

openssl dgst -sha256 -sign "EKU9003173C9.key.pem" -out "digest.txt" "cadena_original.txt"

Paso 4.- Generamos el sello digital

openssl enc -in "digest.txt" -out "sello.txt" -base64 -A -K "EKU9003173C9.key.pem"

Ejemplo de un sello generado

Gk78oNHtr+vQ8/VB1wqU8EYkch5VPqv5AVZ2Rgx4Zmff1sQLKye/qRVzaxxZlKyFjTZca/TgZfpUBfRAZ959enRm5d/nnfHupiHdVNBv8vF1UfXRZzaxo7YdtVAYByqErKeefFBCbAO716zgbRZSDpyWRaiQgV6/hwSADizNpA8cUVBV3gXyRQ9fwMJy2FZzbYVsrgm7X38ogtGlfPnVW1qYS7Wbpm4Stz1YUZ4kpZu/TS/kMCmgg4UTAmyzs4bfRnZrDeVZmKVClEtWgwmDnPGDyoDV+sqCTrUS6hmOKa5mmvGBfmFdK6zzPRaKACzRplXONuQGMfXz1egNUcTjJQ==

📖 Artículos de apoyo:

Trabajar con OpenSSL

Obtén CSD

¿Cómo crear un PFX?


How useful was this post?

Click on a star to rate it!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Updated on septiembre 29, 2023

Related Articles