Openssl
Anexo un archivo zip que contiene :
aaa010101aaa_csd_01.cer - Certificado de prueba, deben usar este mismo para seguir este tutotial
aaa010101aaa_csd_01.key - Llave privada de prueba
Contraseña de clave privada.txt - idem
OpenSSL (exe's y dll) - Libreria de criptografia para generar el sello
PRUEBA.xml - El CFD de prueba que vamos a firmar, tiene varias"trampas" que veremos mas adelante
EXTRAERLLAVEPRIVADA.bat - Explico a continuacion :
El primer paso es, por supuesto, crear un XML y extraer la llave privada, esto se hace con la instruccion que esta dentro de EXTRAERLLAVEPRIVADA.bat, al ejecutarlo se genera el archivo LLAVEPRIVADA.pem.txt, este ultimo representa la llave privada en formato PEM y ya sin la clave de acceso.
NOTAIMPORTANTE : Reza el dicho "ayudate que yo te ayudare", por falta de tiempo no voy a poner mucho detalle, espero que hagan un enorme esfuerzo y traten de digerir la informacion y la analicen.
PASO 1 CREACION DE LA CADENA ORIGINAL
En el Anexo 20 esta la secuencia para formar la cadena original.
Hay dos formas de crear la cadena, una es "manual" agregando los datos uno por uno y separandolos conpipe y la otra es mediante una transformacion xslt.
Este metodo manual es el que vamos a ver aqui.
Nota: aunque menciono que es "manual" me refiero de todos modos que es con un programa, pero es "piedrita por piedrita", veamos :
Dice el Anexo 20:
EMPIEZA CON DOS "PIPES" .....
Cadena = ||
Listo, sigue con la version del CFD, en este caso es "2.0", recuerden siempre terminar conotro pipe
Cadena = ||2.0|
Seguimos, el siguiente atributo es la Serie
Cadena = ||2.0|ABC| (recuerden, estoy tomando los valores de PRUEBA.XML publicado en el post anterior)
El siguiente atributo es el folio
Cadena = ||2.0|ABC|1234|
etc etc etc, mas pasito a pasito no puedo....
IMPORTANTE, si un atributo no existe no es necesario ponerlo en la cadena, asi entonces obtenemos lasiguiente cadena INICIAL, falta depurarla
Código: Seleccionar todo
||2.0|ABC|1234|2010-01-01T12:12:12|12345|2010|ingreso|Pago en una sola exhibicion|68.50|79.46|UCP090807ABC|UAMERO & Compañia SA de CV|Cuba|456|Col. Latinoamerica|Oaxaca|Oaxaca|Oaxaca|México|93736|MMC090909QWE |Mi Mejor Cliente SA de CV|Calle 5 de Mayo|345|Col.Bondojito|Guadalajara|Guadalajara|Guadalajara|México|48473|1|Pieza|Lapiz Berol del No. 2|2.50|2.50|12|Pieza| Borrador Saga|5.00|60.00|3|Pieza|Pluma Bic Negra|2.00|6.00|IVA|16.00|10.96|10.96||
PASO 2 APLICAR REGLA 5 DE LA FORMACION DE CADENA ORIGINAL
Esa regla 5 dice que no debe haber dos espacios seguidos, ni tampoco debe haber espacios antes o despues del "pipe", tampoco retorno de carro (CR char #13 ni #10)
Asi pues, dentro de su programa DEBEN quitaresos caracteres no permitos, en pseudocodigo seria :
Cadena = Remplaza(" "," ",cadena); "remplaza dos espacios por uno solo, es decir donde haya #20#20 lo remplaza con un solo #20"
Cadena = Remplaza(tabulador,"",cadena); "remplaza los tabuladores por cadena vacia"
Cadena = Remplaza(" |","|",cadena); "remplaza espacio+pipe y lo sustituye por un solo pipe
Cadena = Remplaza ("|","|",cadena); "remplaza pipe+espacio y los sutituye por un solo pipe
Cadena = Remplaza(#13,"",cadena); "remplaza el caracter #13 (CR) y lo sustituye por vacio, es decir, lo quita"
Cadena = Remplaza(#10,"",cadena); "remplaza el caracter #10 (LF) y lo sustituye por vacio, es decir, lo quita"
Con eso la cadena que teniamos en el PASO 1 quedaria asi :
Código: Seleccionar todo||2.0|ABC|1234|2010-01-01T12:12:12|12345|2010|ingreso|Pago en una sola exhibicion|68.50|79.46|UCP090807ABC|UAMERO & Compañia SA de CV|Cuba|456|Col. Latinoamerica|Oaxaca|Oaxaca|Oaxaca|México|93736|MMC090909QWE|Mi Mejor Cliente SA de CV|Calle 5 de Mayo|345|Col. Bondojito|Guadalajara|Guadalajara|Guadalajara|México|48473|1|Pieza|Lapiz Berol del No. 2|2.50|2.50|12|Pieza|Borrador Saga|5.00|60.00|3|Pieza|Pluma Bic...
Regístrate para leer el documento completo.