
DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
Como validar "a mano" un sello digital
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Como validar "a mano" un sello digital
Para validar el sello se requiere tener el archivo XML y el certificado.
1. Tomas la cadena "Certificado" de tu XML, la DIVIDES en lineas de 64 caracteres cada una, despues le agregas el encabezado -----BEGIN CERTIFICATE----- y el pie -----END CERTIFICATE----- (el numero de guiones y la frase debe ser EXACTA), en caso que el XML no tenga el certificado puedes descargarlo de un sitio del servidor del SAT
2. Grabas ese certificado en un archivo, digamos "certificado.PEM" (no voy a explicar muchos detalles, pero donde veas negrillas es porque hay informacion que debes estudiar si quieres saber que esta pasando)
3. Toma la cadena "Sello" de tu XML, la DIVIDES en lineas de 64 caracteres y la grabas en archivo con nombre digamos "sello.txt"
4. Generas la cadena original (esta te la tienes que aventar "a mano", es decir, no esta en el XML) y la grabas en un archivo, digamos "cadena.txt" IMPORTANTE no se te olvide grabarla codificada con UTF8
5. Ejecutas lo siguiente :
openssl x509 -in "cert.PEM" -pubkey -noout >pubkey.txt
(para obtener la llave publica)
openssl enc -base64 -d -in "sello.txt" >sellobin.txt
(para pasar el sello de base64 a binario)
openssl dgst -md5 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" >resultado.txt
(aqui esta toda la magia, en el archivo "resultado.txt" tienes......el resultado)
_________________________________________________________________
ACTUALIZACION, a partir del 2011 debes usar SHA1 asi :
openssl dgst -sha1 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" >resultado.txt
(aqui esta toda la magia, en el archivo "resultado.txt" tienes......el resultado)
1. Tomas la cadena "Certificado" de tu XML, la DIVIDES en lineas de 64 caracteres cada una, despues le agregas el encabezado -----BEGIN CERTIFICATE----- y el pie -----END CERTIFICATE----- (el numero de guiones y la frase debe ser EXACTA), en caso que el XML no tenga el certificado puedes descargarlo de un sitio del servidor del SAT
2. Grabas ese certificado en un archivo, digamos "certificado.PEM" (no voy a explicar muchos detalles, pero donde veas negrillas es porque hay informacion que debes estudiar si quieres saber que esta pasando)
3. Toma la cadena "Sello" de tu XML, la DIVIDES en lineas de 64 caracteres y la grabas en archivo con nombre digamos "sello.txt"
4. Generas la cadena original (esta te la tienes que aventar "a mano", es decir, no esta en el XML) y la grabas en un archivo, digamos "cadena.txt" IMPORTANTE no se te olvide grabarla codificada con UTF8
5. Ejecutas lo siguiente :
openssl x509 -in "cert.PEM" -pubkey -noout >pubkey.txt
(para obtener la llave publica)
openssl enc -base64 -d -in "sello.txt" >sellobin.txt
(para pasar el sello de base64 a binario)
openssl dgst -md5 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" >resultado.txt
(aqui esta toda la magia, en el archivo "resultado.txt" tienes......el resultado)
_________________________________________________________________
ACTUALIZACION, a partir del 2011 debes usar SHA1 asi :
openssl dgst -sha1 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" >resultado.txt
(aqui esta toda la magia, en el archivo "resultado.txt" tienes......el resultado)
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Como validar "a mano" un sello digital
Continuado con la validacion "a mano" del sello digital:
Hay un paso intermedio que "no se ve" pero te puede ayudar a depurar.
Puedes obtener el MD5 de la siguiente forma:
openssl dgst -md5 "cadena.txt" >md5.txt
Con eso puedes comparar el md5 que estas obteniendo con el md5 que reporta el validador del sat, si no son igual entonces hay un error en la formacion de la cadena original.
Algo MUY PERO MUY importante, muchas veces al grabar la cadena se le insertan caracteres invisibles, como retorno de carro (#13) o fin de archivo (ctrl-z, eof) etc
Es importante que se grabe la cadena original asi (codigo en Delphi)
var arch : textfile;
assignfile(arch,"cadena.txt);
rewrite(arch)
write(arch,utf8encode(cadena)); <<<< SIN writeln, solo "write", tambien prueba con y sin el utf8encode
closefile(arch)
Hay un paso intermedio que "no se ve" pero te puede ayudar a depurar.
Puedes obtener el MD5 de la siguiente forma:
openssl dgst -md5 "cadena.txt" >md5.txt
Con eso puedes comparar el md5 que estas obteniendo con el md5 que reporta el validador del sat, si no son igual entonces hay un error en la formacion de la cadena original.
Algo MUY PERO MUY importante, muchas veces al grabar la cadena se le insertan caracteres invisibles, como retorno de carro (#13) o fin de archivo (ctrl-z, eof) etc
Es importante que se grabe la cadena original asi (codigo en Delphi)
var arch : textfile;
assignfile(arch,"cadena.txt);
rewrite(arch)
write(arch,utf8encode(cadena)); <<<< SIN writeln, solo "write", tambien prueba con y sin el utf8encode
closefile(arch)
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 4
- Registrado: Vie Ago 13, 2010 10:10 am
Re: Como validar "a mano" un sello digital
Hola dado
Siguiendo el mensaje por aqui... Tengo algunas dudas, paso por paso.
-----BEGIN CERTIFICATE-----
CERTIFICADO LINEA 1 CON 64 CARACTERES
CERTIFICADO LINEA 2 CON EL RESTO DE CARACTERES
-----END CERTIFICATE-----
Siguiendo el mensaje por aqui... Tengo algunas dudas, paso por paso.
Entonces tomo la cadena, ¿pero no entiendo a qué te refieres con dividir? ¿Es un salto de línea? Entonces ese archivo quedará:1. Tomas la cadena "Certificado" de tu XML, la DIVIDES en lineas de 64 caracteres cada una, despues le agregas el encabezado -----BEGIN CERTIFICATE----- y el pie -----END CERTIFICATE----- (el numero de guiones y la frase debe ser EXACTA), en caso que el XML no tenga el certificado puedes descargarlo de un sitio del servidor del SAT
-----BEGIN CERTIFICATE-----
CERTIFICADO LINEA 1 CON 64 CARACTERES
CERTIFICADO LINEA 2 CON EL RESTO DE CARACTERES
-----END CERTIFICATE-----
¿Mismo caso que el anterior, un salto de línea cada 64 caracteres?3. Toma la cadena "Sello" de tu XML, la DIVIDES en lineas de 64 caracteres y la grabas en archivo con nombre digamos "sello.txt"
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Como validar "a mano" un sello digital
Casi, solo que seria asi :
-----BEGIN CERTIFICATE-----
CERTIFICADO LINEA 1 CON 64 CARACTERES
CERTIFICADO LINEA 2 CON 64 CARACTERES
CERTIFICADO LINEA 3 CON 64 CARACTERES
CERTIFICADO LINEA 4 CON 64 CARACTERES
etc
-----END CERTIFICATE-----
Es, como dices al final, un salto de linea cada 64 caracteres.
-----BEGIN CERTIFICATE-----
CERTIFICADO LINEA 1 CON 64 CARACTERES
CERTIFICADO LINEA 2 CON 64 CARACTERES
CERTIFICADO LINEA 3 CON 64 CARACTERES
CERTIFICADO LINEA 4 CON 64 CARACTERES
etc
-----END CERTIFICATE-----
Es, como dices al final, un salto de linea cada 64 caracteres.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 4
- Registrado: Vie Ago 13, 2010 10:10 am
Re: Como validar "a mano" un sello digital
Seguí investigando y encontré que la respuesta es SI.
Seguí todos los pasos (a mi parecer correctamente) y llegué al último punto y dice
unable to load key file
error in dgst
¿Alguna idea que puede ser lo que detone este mensaje? Todo apunto al certificado.pem, talvez algo me falta para la correcta generación de éste. Lo extraño es que usé un PEM que cree una vez anterior con otro fin, y me apareció el mismo mensaje de error
dgst -md5 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" -out "resultado.txt"
Seguí todos los pasos (a mi parecer correctamente) y llegué al último punto y dice
unable to load key file
error in dgst
¿Alguna idea que puede ser lo que detone este mensaje? Todo apunto al certificado.pem, talvez algo me falta para la correcta generación de éste. Lo extraño es que usé un PEM que cree una vez anterior con otro fin, y me apareció el mismo mensaje de error
dgst -md5 -verify "pubkey.txt" -signature "sellobin.txt" "cadoriginal.txt" -out "resultado.txt"
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Como validar "a mano" un sello digital
Todos los archivos (certificado.pem, y los *.txt) puedes abrirlos con el bloc de notas.
Abrelos y checa que mas o menos corresponda la informacion.
Tambien asegurate que el OpenSSL.bat este en el mismo directorio que pubkey.txt o agregale la ruta completa a los archivos
Abrelos y checa que mas o menos corresponda la informacion.
Tambien asegurate que el OpenSSL.bat este en el mismo directorio que pubkey.txt o agregale la ruta completa a los archivos
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 4
- Registrado: Lun Sep 20, 2010 5:07 pm
Re: Como validar "a mano" un sello digital
Saludos.
He realizado los pasos que describen en el post original, he realizado varios intentos de validar el sello de la factura pero hasta ahora lo unico que obtengo en el archivo resultado.txt es "Verification Failure".
Me queda la duda de saber que estoy haciendo mal y como puedo resolver esto, hasta este punto entiendo que he obtenido bien la llave publica del certificado, pero aún así no estoy 100% seguro, pero me queda duda si la codificación en utf-8 de mi cadena original es correcta, también no estoy seguro del resultado de la decodificación del base64, he realizado la decodificación con php, openssl y en una página web con resultados diferentes
.
Mucho les agradeceré me puedan ayudar con esto, siento que estoy cerca de lograr la validación.
Gracias.
He realizado los pasos que describen en el post original, he realizado varios intentos de validar el sello de la factura pero hasta ahora lo unico que obtengo en el archivo resultado.txt es "Verification Failure".
Me queda la duda de saber que estoy haciendo mal y como puedo resolver esto, hasta este punto entiendo que he obtenido bien la llave publica del certificado, pero aún así no estoy 100% seguro, pero me queda duda si la codificación en utf-8 de mi cadena original es correcta, también no estoy seguro del resultado de la decodificación del base64, he realizado la decodificación con php, openssl y en una página web con resultados diferentes

Mucho les agradeceré me puedan ayudar con esto, siento que estoy cerca de lograr la validación.
Gracias.
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Como validar "a mano" un sello digital
Bueno, sin los archivos que generas es muy dificil decirte donde esta el error.
Anexo aqui una factura generada por Office Depot junto con TODOS los archivos auxiliares como cadenaoriginal.txt sello.txt sellobinario.txt etc etc
Haz tus pruebas usando esta factura y compara los resultados, en el punto en el que tengas una diferencia entonces ahi hay un error.
Y aqui viene mi publicidad........si de plano no puedes resolverlo te puedo ofrecer asesoria personalizada, puedo revisar tus archivos y tus procedimientos y asesorarte hasta que consigas validar con exito. Mis servicios son muy economicos, si te interesa mandame un email a la direccion que aparece en mi firma.
Ahora, esto no significa que no puedas seguir recibiendo ayuda gratuita por parte del foro, si hay alguien que tenga alguna recomendacion el comentario es bienvenido.
Anexo aqui una factura generada por Office Depot junto con TODOS los archivos auxiliares como cadenaoriginal.txt sello.txt sellobinario.txt etc etc
Haz tus pruebas usando esta factura y compara los resultados, en el punto en el que tengas una diferencia entonces ahi hay un error.
Y aqui viene mi publicidad........si de plano no puedes resolverlo te puedo ofrecer asesoria personalizada, puedo revisar tus archivos y tus procedimientos y asesorarte hasta que consigas validar con exito. Mis servicios son muy economicos, si te interesa mandame un email a la direccion que aparece en mi firma.
Ahora, esto no significa que no puedas seguir recibiendo ayuda gratuita por parte del foro, si hay alguien que tenga alguna recomendacion el comentario es bienvenido.
- Adjuntos
-
- Ejemplo.zip
- (5.98 KiB) Descargado 1630 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 4
- Registrado: Lun Sep 20, 2010 5:07 pm
Re: Como validar "a mano" un sello digital
Saludos.
Muchas gracias por tu respuesta, que versión de openssl estás usando?, yo tengo la 0.9.7m bajo HP-UX 11.11, tendré que actualizar?
¿Podrías publicar los comandos que usaste para generar los archivos adjuntos de tu post?
Gracias de nuevo.
Muchas gracias por tu respuesta, que versión de openssl estás usando?, yo tengo la 0.9.7m bajo HP-UX 11.11, tendré que actualizar?
¿Podrías publicar los comandos que usaste para generar los archivos adjuntos de tu post?
Gracias de nuevo.
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Como validar "a mano" un sello digital
La version que uso es la 0.9.8b May 2006
Aunque no creo que la version sea importante, es mi opinion.
De los comandos que uso estan en el primer mensaje de este hilo, la mayoria de los archivos los genero con un programa, por ejemplo la cadena original la genero usando funciones de XML y cadenas, el OpenSSL NO GENERA XML's o Cadenas Originales
Aunque no creo que la version sea importante, es mi opinion.
De los comandos que uso estan en el primer mensaje de este hilo, la mayoria de los archivos los genero con un programa, por ejemplo la cadena original la genero usando funciones de XML y cadenas, el OpenSSL NO GENERA XML's o Cadenas Originales
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!