Imagen

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


.

Sello de 25 caracteres, esta bien asi?

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
cbr_net
Mensajes: 125
Registrado: Mar Nov 23, 2010 1:08 pm
Ubicación: Puebla

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por cbr_net »

Por cierto me falto el proceso que sigo...

Selecciono folio, archivo .cer y .key con su contraseña una vez que los tengo ubicados proceso la llave en una funcion "obtenerLLave" que no es mas que la ejecucion de tu instruccion:

openssl.exe pkcs8 -inform DER -in archivo.key -passin pass: 1234567

pero no la guardo en un PEM sino que la regreso en la misma funcion "Obtenerllave", luego elimino los guiones del begin y end que quedan al ejectar esta intruccion, y el resto es procesado con el hash MD5 como esta en e codigo, el resulatdo se almacena en un arreglo de bytes y eso lo convierto en base64.

:D

Gracias y saludos!
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por Dado »

cbr_net escribió:Function ObtenerSello(ByVal Llave As String, ByVal Passw As String) As String
Dim ArregloBytes() As Byte
Dim TempHash As MD5CryptoServiceProvider
Dim FormatoUTF8 As Encoding = Encoding.UTF8
Dim StrLlave As String
Try
'Funcion que me da la llave esta correcta ya que la compare con el resultado de tu ejemplo en Delphi
StrLlave = ObtenerLlave(Llave, Passw)
'Aqui le quito el ------ Begin y el end -------
StrLlave = Mid(StrLlave, 33, Len(StrLlave) - 63)
TempHash = New MD5CryptoServiceProvider
'Realizo el hash de MD5 a un arreglo de bytes
ArregloBytes = TempHash.ComputeHash(Archivo)
'El sello se transforma en base64 **NO!! EL MD5 NO ES EL SELLO, TE FALTA UN PASO AQUI**
ObtenerSelloBin = Convert.ToBase64String(ArregloBytes, Base64FormattingOptions.None)
Catch ex As Exception
MsgBox(Err.Number & " - " & Err.Description)
ObtenerSelloBin = Nothing
End Try
End Function


Saludos.

Aaaaaaaaaaah, no.

El MD5 NO ES EL SELLO !!! Mira muy bien lo que debes hacer :

Crear la cadena original -- parece que ya la haces bien
Calcular el MD5 de la cadena original -- tambien, parece que ya esta
**** Generar el sello -- Tienes que usar OpenSSL (hay otras tambien) y ejecutar el comando del tutorial
Convertir el sello que obtienes del paso anterior a base 64.

Decias "no se que haga -sign" bueno, tienes que estudiar precisamente eso ya que te esta haciendo falta.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
cbr_net
Mensajes: 125
Registrado: Mar Nov 23, 2010 1:08 pm
Ubicación: Puebla

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por cbr_net »

dado escribió:
cbr_net escribió:Function ObtenerSello(ByVal Llave As String, ByVal Passw As String) As String
Dim ArregloBytes() As Byte
Dim TempHash As MD5CryptoServiceProvider
Dim FormatoUTF8 As Encoding = Encoding.UTF8
Dim StrLlave As String
Try
'Funcion que me da la llave esta correcta ya que la compare con el resultado de tu ejemplo en Delphi
StrLlave = ObtenerLlave(Llave, Passw)
'Aqui le quito el ------ Begin y el end -------
StrLlave = Mid(StrLlave, 33, Len(StrLlave) - 63)
TempHash = New MD5CryptoServiceProvider
'Realizo el hash de MD5 a un arreglo de bytes
ArregloBytes = TempHash.ComputeHash(Archivo)
'El sello se transforma en base64 **NO!! EL MD5 NO ES EL SELLO, TE FALTA UN PASO AQUI**
ObtenerSelloBin = Convert.ToBase64String(ArregloBytes, Base64FormattingOptions.None)
Catch ex As Exception
MsgBox(Err.Number & " - " & Err.Description)
ObtenerSelloBin = Nothing
End Try
End Function


Saludos.

Aaaaaaaaaaah, no.

El MD5 NO ES EL SELLO !!! Mira muy bien lo que debes hacer :

Crear la cadena original -- parece que ya la haces bien
Calcular el MD5 de la cadena original -- tambien, parece que ya esta
**** Generar el sello -- Tienes que usar OpenSSL (hay otras tambien) y ejecutar el comando del tutorial
Convertir el sello que obtienes del paso anterior a base 64.

Decias "no se que haga -sign" bueno, tienes que estudiar precisamente eso ya que te esta haciendo falta.

SI!! gracias!! ya lo estoy haciendo... creo que ya vi que me falta pero hasta no estar seguro les comento...

Gracias por todas las observaciones!! en un rato mas les informo del avance.

Un abrazo
cbr_net
Mensajes: 125
Registrado: Mar Nov 23, 2010 1:08 pm
Ubicación: Puebla

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por cbr_net »

Hola!!

Acabo de ver que efectivamnete estaba saltandome un proceso, segun yo ya se genera el sello correctamente, aun que en el validador me sale que el sello no se puede validar... esto supongo es por que estoy usando datos no reales (RFC y FOLIO) y el certificado y la llave son las de prueba que vienen en el programa demo de cubo, sera que estoy listo para poder hacer pruebas con folios reales?? ustedes que me dicen o que me pueden recomendar?

El sello del comprobante presenta problemas:
Comprobante C:\Informes_SAT\Test.xml leido exitosamente

Validando encodingComprobante expresado en UTF-8

Realizando validación del sello con un certificado interno
Certificado usado : 30001000000100000800
El comprobante incluye un certificado codificado

Cadena original:
||2.0|1|2010-11-20T13:02:36|232323|2010|ingreso|Pago en una sola exhibicion|128.84|128.84|JAHR820718HHJ|JAVIER HERNANDEZ RAMIREZ|GUADALUPE VICTORIA|15|CENTRO|PUEBLA|PUEBLA|MEXICO|72000|ALHE701105JJ2|JOSE ALTAMIRANO HERNANDEZ|MIGUEL HIDALGO|CENTRO|CHAPULTEPEC|PUEBLA|MEXICO|72000|2|PZA|7501123015405|M.V.I. 12 LIOFILISADO SOL. INY. ADT.|64.42|128.84|IVA|0.00||

Digestión MD5 de cadena como HEX:
5d090aad4d3081bd15485ec456d462ec

El sello no pudo ser verificado


Aqui dejo el resultado de mi XML.... a ver que les parece...

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Comprobante xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd" version="2.0" folio="1" fecha="2010-11-20T13:02:36" noAprobacion="232323" anoAprobacion="2010" formaDePago="Pago en una sola exhibicion" noCertificado="30001000000100000800" subTotal="128.84" total="128.84" tipoDeComprobante="ingreso" sello="SMObwr3CqMOLw63DhiLDgcOkfwEeS8KuxpLCtsOjwrzCueKAsMKnU8O5w5QRAMOc
BsODX1TDrQfDjTrCsmnCq8KkHcW4dTMvw7PFoTYTJR56QsuGw6/DljTigJlSwqM4
QQjCvWPCqMOm4oC6w7Jnw4Ntw6Jbw7DDgcK34oCYb8aS4oKsxaHCtntBw6kRw6QQ
w6lLEgZSLsOmwqTDnlvCo8Oq4oCTwr8baMOFwpApw4vDtuKAncKhw789wqxBw6DD
k8W9LCXCrsOvy5xtwoEOJg==
" certificado="MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZIhvcNAQEF
BQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZp
Y2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1p
bmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcG
CSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkM
HUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDEL
MAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcM
CUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkC
DCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMDA3MzAx
NjU4NDBaFw0xMjA3MjkxNjU4NDBaMIGWMRIwEAYDVQQDDAlNYXRyaXogU0ExEjAQ
BgNVBCkMCU1hdHJpeiBTQTESMBAGA1UECgwJTWF0cml6IFNBMSUwIwYDVQQtExxB
QUEwMTAxMDFBQUEgLyBBQUFBMDEwMTAxQUFBMR4wHAYDVQQFExUgLyBBQUFBMDEw
MTAxSERGUlhYMDExETAPBgNVBAsMCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQDD0ltQNthUNUfzq0t1GpIyapjzOn1W5fGM5G/pQyMluCzP9YlV
AgBjGgzwYp9Z0J9gadg3y2ZrYDwvv8b72goyRnhnv3bkjVRKlus6LDc00K7Jl23U
YzNGlXn5+i0HxxuWonc2GYKFGsN4rFWKVy3Fnpv8Z2D7dNqsVyT5HapEqwIDAQAB
o4HqMIHnMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMB0GA1UdDgQWBBSYodSw
Rczzj5H7mcO3+mAyXz+y0DAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcGtpLnNh
dC5nb2IubXgvc2F0LmNybDAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0
dHA6Ly9vY3NwLnNhdC5nb2IubXgvMB8GA1UdIwQYMBaAFOtZfQQimlONnnEaoFiW
KfU54KDFMBAGA1UdIAQJMAcwBQYDKgMEMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0G
CSqGSIb3DQEBBQUAA4IBAQArHQEorApwqumSn5EqDOAjbezi8fLco1cYES/PD+LQ
RM1Vb1g7VLE3hR4S5NNBv0bMwwWAr0WfL9lRRj0PMKLorO8y4TJjRU8MiYXfzSuK
YL5Z16kW8zlVHw7CtmjhfjoIMwjQo3prifWxFv7VpfIBstKKShU0qB6KzUUNwg2O
la4t4gg2JJcBmyIAIInHSGoeinR2V1tQ10aRqJdXkGin4WZ75yMbQH4L0NfotqY6
bpF2CqIY3aogQyJGhUJji4gYnS2DvHcyoICwgawshjSaX8Y0Xlwnuh6EusqhqlhT
gwPNAPrKIXCmOWtqjlDhho/lhkHJMzuTn8AoVapbBUnj">
<Emisor rfc="JAHR820718HHJ" nombre="JAVIER HERNANDEZ RAMIREZ">
<DomicilioFiscal calle="GUADALUPE VICTORIA" noExterior="15" colonia="CENTRO" municipio="PUEBLA" estado="PUEBLA" pais="MEXICO" codigoPostal="72000" />
</Emisor>
<Receptor rfc="ALHE701105JJ2" nombre="JOSE ALTAMIRANO HERNANDEZ">
<Domicilio calle="MIGUEL HIDALGO" colonia="CENTRO" municipio="CHAPULTEPEC" estado="PUEBLA" pais="MEXICO" codigoPostal="72000" />
</Receptor>
<Conceptos>
<Concepto cantidad="2" unidad="PZA" noIdentificacion="7501123015405" descripcion="M.V.I. 12 LIOFILISADO SOL. INY. ADT." valorUnitario="64.42" importe="128.84" />
</Conceptos>
<Impuestos>
<Retenciones>
<Retencion impuesto="IVA" importe="0.00" />
</Retenciones>
</Impuestos>
</Comprobante>
Adjuntos
Test.xml
(3.38 KiB) Descargado 320 veces
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por Dado »

Quita los retorno de carro #13 #10 al sello

KuxpLCtsOjwrzCueKAsMKnU8O5w5QRAMOc
BsODX1TDrQfDjTrCsmnCq8KkHcW4dTMvw7PFoTYTJR56QsuGw6
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 1:55 am
Ubicación: México, D.F.
Contactar:

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por mauricio »

No, compañero, aun y cuando uses datos de prueba y los certificados de prueba, tiene que validarte la factura correctamente como en el anexo que te envie en este mismo hilo...

Saludos
Todo lo que no es dado es perdido
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por Dado »

mauricio escribió:No, compañero, aun y cuando uses datos de prueba y los certificados de prueba, tiene que validarte la factura correctamente como en el anexo que te envie en este mismo hilo...

Saludos
Mauricio tiene razon, aunque estes usando folios y certificados de prueba DEBES conseguir un "Sello valido" a como de lugar antes de aventarte en serio con datos reales.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
cbr_net
Mensajes: 125
Registrado: Mar Nov 23, 2010 1:08 pm
Ubicación: Puebla

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por cbr_net »

Hola!!

Gracias por los tips!! ya le quite los caracteres #10 y #13 y el sello y certificado salen limpios!! :mrgreen: ahora bien a pesar de ello el validador de sat me dice que no se pudo validar mi sello....

El sello del comprobante presenta problemas:
Comprobante C:\Informes_SAT\Test.xml leido exitosamente

Validando encodingComprobante expresado en UTF-8

Realizando validación del sello con un certificado interno
El sello no pudo ser verificado

Sin embargo el valida de dado me dice que "La factura se elaboro fuera de la vigencia del certificado" supongo que por eso el sello no es valido no?? :?: ahora bien si esa es la causa y como me comentan dado igual que mauricio que debe validar el sello aun con datos ficticios me puedenorientar donde puedo conseguir folios, llaves y certificados de prueba validos?

Aqui dejo mi xml nuevo...

Gracias por todo el apoyo!!

Saludos.
Adjuntos
Test.xml
(3.22 KiB) Descargado 347 veces
mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 1:55 am
Ubicación: México, D.F.
Contactar:

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por mauricio »

Hola Compañero...

Te anexo los certificados de pruebas del SAT, están vigentes y con ellos e transformado tu archivo Test.xml en una CFD valido que tu mismo puedes verificar aquí: https://www.consulta.sat.gob.mx/SICOFI_ ... dador.html
certificado.zip
(2.77 KiB) Descargado 383 veces
Test.xml
(3.13 KiB) Descargado 394 veces
Para los folios usa lo que se te imaginen, que sean números...

Saludos

P.D. La contraseña del KEY es a0123456789
Todo lo que no es dado es perdido
cbr_net
Mensajes: 125
Registrado: Mar Nov 23, 2010 1:08 pm
Ubicación: Puebla

Re: Sello de 25 caracteres, esta bien asi?

Mensaje por cbr_net »

Bueno yo de nuevo...

He tratado de resolver este problema y la verdad es que no he podido dar con el detalle, el punto es que al parecer ni mi sello ni mi certificado son validos ya que los validadores no lo aprueban y el ejemplo de mauricio pasa sin problema, obviamente mi proceso no esta bien, pero l verdad he hecho muchas pruebas y no doy con el detalle... :'(

Lo que he encontrado es lo siguiente: he comparado el sello y el certificado del xml que me envio mauricio y el mio el sello es completamente distinto, y lo que me llama la atencion es que el certificado es aparentemente igual pero no es asi, lo inserto en un word y le doy "mostrar todo", el resultado es que en el certificado de mauricio hay varios retorno de carro (enter) cosa que en el mio no ya que los elimino, por eso aqui me salta un duda... al generar la llave y/o el certificado en el txt empiesa con "------ Begin CERTIFICATE -------" o rsa key segun el caso, esos caracteres los tengo que eliminar? o se pueden quedar asi? he probado las dos formas pero aun asi no me valida y pregunto solo para saber como lo tengo que dejar (con o sin) y enfocarme en detectar otros posibles detalles en mi generacion del sello, opte por cambiar mi proceso y poner exactamente como dado en el tutorial pero sigo sin validar, dejo el ejemplo de codigo que estoy utilizando actualmente....


Function ProcesoGlobal(ByVal Llave As String, ByVal PassLlave As String, ByVal Certificado As String) As Boolean
Try
GuardaCadenaOriginal() -- La cadena original esta sin problemas y se guarda en c:\informes_sat\cad.txt
Shell("C:\OpenSSL\bin\openssl.exe x509 -inform DER -in c:\informes_sat\Certificado.cer -out c:\informes_sat\Cer.txt")
Shell("C:\OpenSSL\bin\openssl.exe pkcs8 -inform DER -in c:\informes_sat\Certificado.key -passin pass:a0123456789 -out c:\Informes_sat\llave.pem.txt")
Shell("C:\OpenSSL\bin\openssl.exe dgst -md5 -sign c:\informes_sat\llave.pem.txt -out c:\informes_sat\SelloBin.txt c:\informes_sat\cad.txt")
Shell("C:\OpenSSL\bin\openssl enc -base64 -in C:\informes_sat\SelloBin.txt -out C:\informes_sat\Sello.txt")
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function

Despues elimino los caracteres especiales y regenero mi xml....

Sello = AbrirArchivoTexto("C:\informes_sat\Sello.txt")
Certificado = AbrirArchivoTexto("C:\informes_sat\cer.txt")
Sello = Replace(Sello, Chr(10), "")
Sello = Replace(Sello, Chr(13), "")
Certificado = Replace(Certificado, "-", "")
Certificado = Replace(Certificado, " ", "")
Certificado = Replace(Certificado, "END", "")
Certificado = Replace(Certificado, "BEGIN", "")
Certificado = Replace(Certificado, "CERTIFICATE", "")
Certificado = Replace(Certificado, Chr(10), "")
Certificado = Replace(Certificado, Chr(13), "")
CrearXML(Val(LblOperacion.Text), 1, 232323, 2010, Sello, Certificado)

Dejo mi xml con mi sello y certificado....

Gracias y saludos.
Adjuntos
Test.xml
(3.12 KiB) Descargado 315 veces
Cerrado