Como validar "a mano" un sello digital

La libreria OpenSSL es la mas usada para generar el sello digital, independientemente del lenguaje aqui encontraras informacion de como usar la libreria
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Como validar "a mano" un sello digital

Mensajepor Dado » Mié Jul 07, 2010 10:26 am

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)
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

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

Re: Como validar "a mano" un sello digital

Mensajepor Dado » Mié Jul 07, 2010 10:29 am

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)
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

kontrol
Mensajes: 4
Registrado: Vie Ago 13, 2010 11:10 am

Re: Como validar "a mano" un sello digital

Mensajepor kontrol » Lun Ago 16, 2010 2:16 pm

Hola dado

Siguiendo el mensaje por aqui... Tengo algunas dudas, paso por paso.

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


Entonces tomo la cadena, ¿pero no entiendo a qué te refieres con dividir? ¿Es un salto de línea? Entonces ese archivo quedará:

-----BEGIN CERTIFICATE-----
CERTIFICADO LINEA 1 CON 64 CARACTERES
CERTIFICADO LINEA 2 CON EL RESTO DE CARACTERES
-----END CERTIFICATE-----

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"


¿Mismo caso que el anterior, un salto de línea cada 64 caracteres?

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

Re: Como validar "a mano" un sello digital

Mensajepor Dado » Lun Ago 16, 2010 2:46 pm

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.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

kontrol
Mensajes: 4
Registrado: Vie Ago 13, 2010 11:10 am

Re: Como validar "a mano" un sello digital

Mensajepor kontrol » Lun Ago 16, 2010 2:51 pm

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"

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

Re: Como validar "a mano" un sello digital

Mensajepor Dado » Mié Sep 01, 2010 11:24 pm

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
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

lordcold
Mensajes: 4
Registrado: Lun Sep 20, 2010 6:07 pm

Re: Como validar "a mano" un sello digital

Mensajepor lordcold » Lun Sep 20, 2010 6:13 pm

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.

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

Re: Como validar "a mano" un sello digital

Mensajepor Dado » Lun Sep 20, 2010 9:42 pm

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.
Adjuntos
Ejemplo.zip
(5.98 KiB) Descargado 1504 veces
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

lordcold
Mensajes: 4
Registrado: Lun Sep 20, 2010 6:07 pm

Re: Como validar "a mano" un sello digital

Mensajepor lordcold » Mar Sep 21, 2010 10:54 am

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.

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

Re: Como validar "a mano" un sello digital

Mensajepor Dado » Mar Sep 21, 2010 11:34 am

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
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!


Volver a “OpenSSL en general (cualquier lenguaje)”

¿Quién está conectado?

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