Ver Mensaje Individual
  #149  
Antiguo 07-07-2010
Oscar Súchil Oscar Súchil is offline
Registrado
 
Registrado: jul 2010
Posts: 6
Reputación: 0
Oscar Súchil Va por buen camino
Ya casi queda

Cita:
Empezado por dado Ver Mensaje
Oscar ::::

Si, de hecho la idea principal de mi ValidaCFD es que pueda ser usado por todo el publico PARA RECIBIR FACTURAS, exactamente lo que tu estas haciendo.

Para validar el sello.....es un proceso largo pero sencillo (especialmente sencillo cuando sabes como hacerlo je je je).

Te doy "la punta de la madeja", te toca desentrañar todo el desarrollo.

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)

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 (ver UTF8ENCODE de Delphi)

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)
Que tal Dado, antes que nada te quiero agradecer por la ayuda no tienes una idea cuanto haz facilitado mi comprensión del validador, ya pude acabar todo el proceso, y ya estuve probando contra el validador del sat y nada mas no puedo hacer que sea valido mi resultado siempre aparece

"Verification Failure"

Mira este es mi cadena original en el archivo

utf8.txt

||2.0|A|7306|2010-05-25T10:25:46|44616|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|MONEDA: MXN, TC: 1.0000|700.00|0.00|812.00|DAA020218JY1|DSV AIR & SEA, S.A. de C.V.|Indiana|260|Piso 11 Desp.1107|Ciudad de los Deportes|TEL: (55) 6515-6525|BENITO JUAREZ|Distrito Federal|M?xico|03710|GPU030429I10|
GESTAMP PUEBLA SA DE CV|AUTOMOCION 8 SAN LORENZO|ALMECATLA CUAUTLANCINGO PUEBLA C.P. 72710|MEXICO|1|PZA|392|TRANSFERENCIA ELECTRONICA MANIFIESTO|700.00|700.00|IVA|16.00|112.00|112.00||


Esta es la que aparece en el validador del sat en el recuadro de cadena original.

||2.0|A|7306|2010-05-25T10:25:46|44616|2009|ingreso|PAGO EN UNA SOLA EXHIBICION|MONEDA: MXN, TC: 1.0000|700.00|0.00|812.00|DAA020218JY1|DSV AIR & SEA, S.A. de C.V.|Indiana|260|Piso 11 Desp.1107|Ciudad de los Deportes|TEL: (55) 6515-6525|BENITO JUAREZ|Distrito Federal|México|03710|GPU030429I10|
GESTAMP PUEBLA SA DE CV|AUTOMOCION 8 SAN LORENZO|ALMECATLA CUAUTLANCINGO PUEBLA C.P. 72710|MEXICO|1|PZA|392|TRANSFERENCIA ELECTRONICA MANIFIESTO|700.00|700.00|IVA|16.00|112.00|112.00||

La única diferencia apreciable es el acento en México por M?xico (ojo esto ya lo modifique a pata para ver si eso era y no sigue dando error); como lo
expresa en mi programa pero según yo ya lo exprese en UTF8 y genere
el sello, pero no logro hacer que se valide el sello, no se cual sea el error
ya estuve cambiando la cadena a UTF8 a mano sin mi programa y nop no me
deja, el sello lo dividí en 64 caracteres asi como lo pase a binario mira aqui
te dejo los demas datos:

sello.txt:

aSBXOlIeM6HG1Iqaj8vpBNR29It1PmDdkgGOkeslzV13M1pxDNfxeU1CybvlU5TO
StXmiFLFnWBmfasg3BnJVqDlruDhMyfne3TyjXZ8Ng9q8EyFkO/1IElIaGCO8fig
8gIru30smNsi3iXj9NKOqgwjRHq2Alyss3DAx0goLR8=

sellobin.txt:

i W:R3¡ÆÔŠšËéÔvô‹u>`Ý’Ž‘ë%Í]w3Zq ×ñyMBÉ»åS”ÎJÕæˆRÅ`f}« ÜÉV å®àá3'ç{tòv|6jðL…ïõ IHh`Žñø ò+»},˜Û"Þ%ãôÒŽª #Dz¶\¬³pÀÇH(-

pubkey.txt:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqJBY3wC8c/90lDXbs5ua2n2aJ
ueaeUbo3U4kTUQ0mMfrChnEbbpNllbZoGeMl1dwxTj4IQD71iYiLU3sZQIYQdaVK
sQiL3B6Dy31cJWPuHECfPXIFZ4Nvy0c9s8SY5DrQfgtySzdXFk6Z4kgLU5RDXeej
LkxXQtQAFp9qC68n5wIDAQAB
-----END PUBLIC KEY-----

cert.pem:

-----BEGIN CERTIFICATE-----
MIIEIjCCAwqgAwIBAgIUMDAwMDEwMDAwMDAxMDA3MjgwNjMwDQYJKoZIhvcNAQEF
BQAwggE2MTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJh
Y2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3Ry
YWNpw7NuIFRyaWJ1dGFyaWExHzAdBgkqhkiG9w0BCQEWEGFjb2RzQHNhdC5nb2Iu
bXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYD
VQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVy
YWwxEzARBgNVBAcMCkN1YXVodGVtb2MxMzAxBgkqhkiG9w0BCQIMJFJlc3BvbnNh
YmxlOiBGZXJuYW5kbyBNYXJ0w61uZXogQ29zczAeFw0wOTA2MjUxNzU5MjNaFw0x
MTA2MjUxNzU5MjNaMIHCMR8wHQYDVQQDFBZEU1YgQUlSICYgU0VBIFNBIERFIENW
MR8wHQYDVQQpFBZEU1YgQUlSICYgU0VBIFNBIERFIENWMR8wHQYDVQQKFBZEU1Yg
QUlSICYgU0VBIFNBIERFIENWMSUwIwYDVQQtExxEQUEwMjAyMThKWTEgLyBWQUdU
NzAxMTI0UkEzMR4wHAYDVQQFExUgLyBWQUdUNzAxMTI0TURGTE5SMDMxFjAUBgNV
BAsTDUNFTlRSTyBERUwgREYwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOok
FjfALxz/3SUNduzm5rafZom55p5RujdTiRNRDSYx+sKGcRtuk2WVtmgZ4yXV3DFO
PghAPvWJiItTexlAhhB1pUqxCIvcHoPLfVwlY+4cQJ89cgVng2/LRz2zxJjkOtB+
C3JLN1cWTpniSAtTlENd56MuTFdC1AAWn2oLryfnAgMBAAGjHTAbMAwGA1UdEwEB
/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQDSAqh45oVZhK9Q
En605MctBanZqUF967LV5uLY1zRhaAf1IVnOVK2fcp/icvb2jm4vua7odjPBgkfs
OhE8gOvgo6pmUlq2a2zakBTQpWSjK4hhvGyMqFi5J/OW5EXazWaQCh2fSlTcBo0v
7t2hsJd63TvnSNXAY7JiT7/i1rnhMUXa0deUapiPUAhQwo/kSb6cGM5nArbCaAjR
8oxXMd0EEXsekJBJHrj1txjzGJhfgaa5oy6ia19ubXsFONCjhoTF6yXTM1jFxtEy
wFtpmIRHAiC43U525K9dkSB1Ql88GUSwtS9Is7AeFZ07b/W131MJ9zdJb00iYi13
x3QX9LIO
-----END CERTIFICATE-----

Mis sentencias de openssl utilizadas son:
openssl x509 -in C:\DesencriptarSelloSAT\Config\PubKey\gencer.pem -pubkey -noout >C:\DesencriptarSelloSAT\Config\PubKey\pubkey.txt
openssl enc -base64 -d -in C:\DesencriptarSelloSAT\Config\PubKey\sello.txt >C:\DesencriptarSelloSAT\Config\PubKey\sellobin.txt
openssl dgst -md5 -verify C:\DesencriptarSelloSAT\Config\PubKey\pubkey.txt -signature C:\DesencriptarSelloSAT\Config\PubKey\sellobin.txt C:\DesencriptarSelloSAT\Config\PubKey\utf8.txt >C:\DesencriptarSelloSAT\Config\PubKey\resultado.txt


Cualquier asesoría que me puedas proporcionar te la agradeceré, yo mientras le sigo buscando haber que encuentro, de antemano gracias.
Responder Con Cita