El CFDi fue firmado de manera incorrecta

Es tan comun este tema que he decidido abrir un foro especial para este caso. Se trata de programadores que tienen problemas para crear el Sello Digital y que no pasan la validacion
Sparrow
Mensajes: 6
Registrado: Mar Ago 21, 2012 2:03 pm

El CFDi fue firmado de manera incorrecta

Mensajepor Sparrow » Mar Ago 21, 2012 4:47 pm

Hola amigos foreros.

Les cuento que ando en un problema a la hora de generar el sello de mi CFDI a partir de la cadena original, llevo todo el día viendo en el foro pero no he encontrado mi solución y aunque no me gusta comentar dos veces el mismo problema ojalá alguien me pueda ayudar.

Esta es la cadena original que creo a partir del xml que voy a adjuntar

||3.2|2012-08-21T14:12:19|ingreso|PAGO EN UNA SOLA EXHIBICION|546.96|546.96|no aplica|Mexico|LAL290610L86|LIMON ALMACENES, S.A. DE C.V.|CARRETERA ALAZAN - CANOAS, KM. 68-A|10 DE MAYO|TANTOYUCA|VERACRUZ|Mexico|92100|CARRETERA ALAZAN - CANOAS, KM. 68-A|10 DE MAYO|TANTOYUCA|VERACRUZ|Mexico|92100|Régimen General de Ley Personas Morales|CABR620320RJ5|ROBERTO CABRERA BUSTOS|LOPEZ MATEOS|35|CHICONTEPEC|VERACRUZ|Mexico|06600|1.00|Ud.|LOCION HICKOK FOR MEN|68.97|68.97|1.00|Ud.|ACEITE DE OLIVA|53.40|53.40|1.00|Ud.|ACEITE 1-2-3|24.50|24.50|1.00|Ud.|QUESO PANELA NORMEX|18.50|18.50|1.00|Ud.|BOLSA POLI 25X35|28.45|28.45|1.00|Ud.|MAIZENA CAJETA|0.16|0.16|1.00|Ud.|ESCOBILLON S/BASE CEP|12.93|12.93|1.00|Ud.|GERBER MAMILA ORTOD.226|12.16|12.16|1.00|Ud.|VINAGRE BLANCO HERDEZ|4.40|4.40|1.00|Ud.|GERBER CEPILLO P/BIBERON|16.38|16.38|1.00|Ud.|GELAT DANY PIÑA|3.50|3.50|1.00|Ud.|LOCION HICKOK FOR MEN|68.97|68.97|1.00|Ud.|ACEITE DE OLIVA|53.40|53.40|1.00|Ud.|GELAT DANY AGUA LIMON|3.50|3.50|1.00|Ud.|ESCOBA ABANICO BARRE BARRE(AB12)|28.45|28.45|1.00|Ud.|MARGARINA FLEX ROJO|32.00|32.00|1.00|Ud.|VINAGRE MANZANA L.T.M.|5.50|5.50|1.00|Kgs.|QUESO DE PUERCO DUBY KG|34.00|34.00|1.00|Ud.|CHICHARRON DE CERDO MEGA|40.00|40.00|IVA|16.00|37.79||

He comprobado desde el validador del SAT que lo hace exactamente igual y genero este sello digital que por supuesto anexo en mi xml

B20tusypoAwl57AMXFGbanqXm+MrN4fm3mfl2vAKJz0e69fHNZSG5x0yiaQQKk4UQNh5wzeKVxQt5L6VTgAQTZNyDU/iprx4jdAh/49qWbc4rV7ItJkvppzcYD8x/fO2KnGZTJ/EJsc5+w50VTiPfnfsME6NdZZ/FfzPPuEBD4A=

Por lo que he visto en muchos comentarios la cadena original no puede tener ningún espacio o carácter extraño como un espacio o enter ya que podría alterar el sello y sería distinto al que genera mi PAC (EDICOM) y bueno, hasta donde he podido es igual y el archivo es un simple txt.

El sello lo genero de la siguiente forma.

--> Primero creo el archivo PEM
openssl pkcs8 -inform DER -in archivo.key -passin pass:a0123456789 -out archivo.pem
--> Después creo el sello
openssl dgst -md5 -sign mau.pem cadenaoriginal.txt | openssl enc -base64 -A > sello.txt


Si hay algo que les puedo ayudar para que me ayuden díganme... por favor... muchas gracias de antemano...
Adjuntos
CFDI.xml
(5.71 KiB) Descargado 313 veces

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor Dado » Mar Ago 21, 2012 4:54 pm

cambia el "-md5" en tu instruccion de sellado por un "-sha1"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

Sparrow
Mensajes: 6
Registrado: Mar Ago 21, 2012 2:03 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor Sparrow » Mié Ago 22, 2012 12:34 pm

Muchas gracias DADO, de hecho la instrucción la cambié hace un par de días viendo el foro por -sha1, pero copié la antigua...
Sigo con el mismo problema poniendo el -sha1. ¿Se te ocurre algo mas que pueda ser?

Muchas gracias

RickAlanis
Mensajes: 288
Registrado: Jue Ago 04, 2011 9:41 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor RickAlanis » Vie Ago 24, 2012 6:37 pm

¿Pudiste resolver tu problema?

Analicé tu XML y van dos comentarios (que supuestamente no son causantes del error):

a) El subtotal que indicas como atributo del elemento "Comprobante" no corresponde al subtotal calculado de tus detalles (el subtotal y el total son iguales en el encabezado).
b) La hora en la cadena que incluyes es 14:12:19, mientras que en el XML es 14:12:28. Por lo demás, la cadena que yo calculo es igual a la que publicas.

La pregunta del millón: ¿Será que esa hora hace la diferencia? ¿Hay algún cambio entre que generas la cadena y el cálculo del sello? ¿La cadena la generas con XSLT o a mano?

¡Saludos!

Sparrow
Mensajes: 6
Registrado: Mar Ago 21, 2012 2:03 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor Sparrow » Sab Ago 25, 2012 3:32 am

Buen punto amigo RickAlanis.

La cadena original si que la genero a mano porque todo lo que he encontrado para generarla con XSLT aunque vaya mucho mejor es mas lento. La cadena original si que la genero después del XML y podría ser la causa ya que evidentemente la hora tiene que ser exacta de la del XML. Voy a resolver lo que me dices y sigo probando.

Mil gracias.

RickAlanis
Mensajes: 288
Registrado: Jue Ago 04, 2011 9:41 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor RickAlanis » Sab Ago 25, 2012 8:40 am

A menos que sea crítico el tiempo, como en producir XMLs en gran volumen, te recomiendo usar XSLT porque finalmente es lo que va a usar el validador.

Saludos.

Sparrow
Mensajes: 6
Registrado: Mar Ago 21, 2012 2:03 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor Sparrow » Sab Ago 25, 2012 11:25 am

Muchas gracias RickAlanis, voy a comentarte otra cosa... ojalá se te ocurra que pueda ser

he comparado mi XML una vez mas con el validador del SAT, la cadena original que aparece tanto con mi generador como en la página del SAT es el mismo:

https://www.consulta.sat.gob.mx/sicofi_web/moduloECFD_plus/ValidadorCFDI/Validador%20cfdi.html

Código: Seleccionar todo


||3.2|2012-08-25T10:57:18|ingreso|PAGO EN UNA SOLA EXHIBICION|286.56|286.56|no aplica|Mexico|LAL290610L86|LIMON ALMACENES, S.A. DE C.V.|CARRETERA ALAZAN - CANOAS, KM. 68-A|10 DE MAYO|TANTOYUCA|VERACRUZ|Mexico|92100|CARRETERA ALAZAN - CANOAS, KM. 68-A|10 DE MAYO|TANTOYUCA|VERACRUZ|Mexico|92100|Régimen General de Ley Personas Morales|CABR620320RJ5|ROBERTO CABRERA BUSTOS|LOPEZ MATEOS|35|CHICONTEPEC|VERACRUZ|Mexico|06600|1.00|Ud.|LOCION HICKOK FOR MEN|68.97|68.97|1.00|Ud.|ACEITE DE OLIVA|53.40|53.40|1.00|Ud.|ACEITE 1-2-3|24.50|24.50|1.00|Ud.|QUESO PANELA NORMEX|18.50|18.50|1.00|Ud.|BOLSA POLI 25X35|28.45|28.45|1.00|Ud.|MAIZENA CAJETA|0.16|0.16|1.00|Ud.|ESCOBILLON S/BASE CEP|12.93|12.93|1.00|Ud.|GERBER MAMILA ORTOD.226|12.16|12.16|1.00|Ud.|VINAGRE BLANCO HERDEZ|4.40|4.40|1.00|Ud.|GERBER CEPILLO P/BIBERON|16.38|16.38|1.00|Ud.|GELAT DANY PIÑA|3.50|3.50|1.00|Ud.|GELATINA DANY AGUA FSA|3.50|3.50|1.00|Ud.|GELAT DANY AGUA LIMON|3.50|3.50|1.00|Ud.|SH MENNEN CLASICO 129|12.07|12.07|IVA|16.00|24.14||


ejecutando : openssl dgst -sha1 "C:\Limon almacenes\cfdiClient\MATRIZ\DATOS\IN\cadenaoriginal.txt"

devuelve la cadena original que yo creo en SHA-1 expresada en hexadecimal: d200ae1f2a4380d7a59c23bc2da396147581ab95

Para mi sorpresa el hexadecimal del SAT coincide con el de mi instrucción en openssl por lo que no voy tan mal...

ahora bien, creo que mi problema está en lo siguiente:

Cuando voy a crear mi sello hago lo siguiente con openssl:

Código: Seleccionar todo


openssl pkcs8 -inform DER -in certificado.key -passin pass:password -out archivo.pem
openssl dgst -sha1 cadenaoriginal.txt
openssl dgst -sha1 -sign archivo.pem cadenaoriginal.txt | openssl enc -base64 -A > sello.txt


Hasta aquí todo bien pero cuando edito el archivo "archivo.pem" veo lo siguiente en el contenido...

Código: Seleccionar todo


-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC3A+/ujxVeb93wuxonp1xvb8F96S4tEBuXoX1qBE3TTjftbHUq
OcJ5tramEPK01BGEpG9r62kfbAK+th91vc+mRI+T2AjkmaWrurcnoalwoNFox/N4
MdexDK/0XuXYlAbaoO1Y93nfle4tqrLiURn/XU15ALNMxjRHQqXucIRwaQIDAQAB
AoGAL/WSLHvGZ8b87Ba71eRfrrwkgnBWr2xnLqcdDGkwU81NjqQ7V+Nm+SpOVtpe
H9Dq/k1w/WDlXVyao4tqVxp0jXYglMRtHsKvvOxecwo66Ia5bQXStXEOdUGvSOhA
7b+0L0MzHjLCTDsZN85c5niVdSqX1yBgHMqLhQEjJwDtQ9kCQQDiFOtKyCR8hSAu
GEsP+MHXbwHxN0nw65doVCTOiVWQCHApVyydUB2YqLIneLWDoxEiB5e1AOueP9No
wz+gX3ZTAkEAzzwJ7yisj0WT/BGtqfVUZo5/iOYMY90wckudIMaOCWuxssnginO1
NXJG9Zt4eXQ4rDAPvYhEUUzadLqzwsEu0wJBAJvAybEFXY2jsV3QQrZILFMdGPtz
ma8uv2qSvaDEoHvQNGVmt0fRj/JCFip3UKXVy9Hj5TI/5hNp6V29VbJI0h0CQFTr
3YZLvKrZcFMTS38iMXv1WP3Yh6tEsN2lbrZHp1zk7OS/JWyXDeLg+YMcOrpKjg7B
gzG/7X8DZ2H+QDvGvlECQHLu1Wbvw5MOcrHYERlW9DeTct+apUwnnKT90HEDBfJF
Q678LZpaxjyiqSljiLf5PqZxftpxjNBnJwpEpzgrJjw=
-----END RSA PRIVATE KEY-----


Después de esto lo que hice fue editar este archivo y quitarle esto -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- para después ejecutar solo la instrucción openssl dgst -sha1 -sign archivo.pem cadenaoriginal.txt | openssl enc -base64 -A > sello.txt pero al ejecutar esta instrucción habiendo editado el archivo pem openssl me devuelve el error "unable to load key file"



PD:. No se si comprarme un sable y hacerme el harakiri pero no hay manera... que hago mal!!! :(

RickAlanis
Mensajes: 288
Registrado: Jue Ago 04, 2011 9:41 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor RickAlanis » Sab Ago 25, 2012 11:33 am

Si quieres comprarte la katana, por mi está bien, luego de que cortes lo que te digo a continuación, me la regalas:

Tienes 3 líneas donde haces el "firmado" de tu cadena.
La segunda instrucción está de más.

Código: Seleccionar todo

 openssl dgst -sha1 cadenaoriginal.txt


porque enseguida lo haces de nuevo, pero con el parámetro "-sign".
Quita la línea que te digo con la katana y luego me mandas esa espada a mi casa, porque verás que es suficiente.

Saludos!

Sparrow
Mensajes: 6
Registrado: Mar Ago 21, 2012 2:03 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor Sparrow » Sab Ago 25, 2012 11:49 am

Gracias por la respuesta, la segunda línea no es para firmar es para que me devuelva la cadena original expresada en hexadecimal, me sirvió para compararlo con el validador del SAT y darme cuenta que la cadena original la genero bien

lo único que hace openssl con esto es devolverme d200ae1f2a4380d7a59c23bc2da396147581ab95

luego lo que si hago es generar el sello con el parámetro sign:

Código: Seleccionar todo


openssl dgst -sha1 -sign archivo.pem cadenaoriginal.txt | openssl enc -base64 -A > sello.txt


¿no crees que pueda ser por lo que te he comentado en el post anterior del archivo pem ?

RickAlanis
Mensajes: 288
Registrado: Jue Ago 04, 2011 9:41 pm

Re: El CFDi fue firmado de manera incorrecta

Mensajepor RickAlanis » Sab Ago 25, 2012 12:13 pm

¿No te faltará codificar cadenaoriginal.txt en utf-8?

El detalle de insistir usar XSLT (aunque lento) es que todo lo hace conforme a los cánones y no tienes problemas.

¿Por qué no pruebas esto (cada una por separado)?

a) Crear la cadena original con el XSLT

b) Una vez creada a mano la cadena, codificar el archivo en utf-8.

A ver cuál te funciona.

Saludos


Volver a “SELLO DIGITAL INVALIDO”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados