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


.

Duda de Como Autentificarse en los WebService de Descarga de los XML

Todo lo que no cabe en los demas foros........
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por Dado »

Segun el esquema de firmado debes definir que nodo estas firmando, y lo debes identificar con "algo", lo que sea, puede ser un "_0" (guion bajo-cero) o con un uuid o lo que sea

Entonces, en el nodo BinarySecurityToken solo le estan poniendo un nombre, un ID (que por alguna razon escogieron un nombre muy complicado !!)

Y luego en la firma digital, hacen referencia a ese nombre, ya que hay que "decirle" donde esta el certificado que se necesita para validar la firma

Entonces, en el nodo SecurityToken.Reference.Value indicas que el security token esta en el nodo identificado con el id tal y cual.

En resumen, puedes poner CUALQUIER VALOR, siempre y cuando sea el mismo en el BinarySecurityToken.Id vs. SecurityToken.Reference

Espero haberme explicado
<o:BinarySecurityToken u:Id="uuid-7de252ad-a383-458d-a467-8aadb076df4f-1"

es el mismo valor que en

<o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/ ... rofile-1.0#X509v3" URI="#uuid-7de252ad-a383-458d-a467-8aadb076df4f-1"/>

Mira como dice.......que un certificado X509 esta en el URI identificado con el id tal y cual
El DigestValue es efectivamente el SHA1 del nodo TimeStamp pero expresado en base64***

El el SignatureValue, es el sello digital, tal como lo indicas


***ES AQUI DONDE A MI ME FALLA, no se porque no puedo obtener el mismo sha1.base64 que el ejemplo
Hay una pagina para obtener este valor aqui solo cambia donde dice Output format a que diga "base 64 output"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 1:30 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por estebanchambas »

DADO escribió:Listo, adjunto request, response y headers validos generados por el programa de Halcon Divino

La operacion fue a las 10:40 am , lo menciono para que noten como el Timestamp y en los headers manejan la hora GMT que es (hora local + 5 horas)
Gracias Dado, voy a estudiarlo, para inyectarle estos Request Headers a ver como me va. Saludos
crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por crono81 »

Hay algo que va mal....
si a este nodo (que sería el del request que compartiste), le hacemos sha1:
<u:Timestamp u:Id="_0"><u:Created>2018-09-26T15:40:02.763Z</u:Created><u:Expires>2018-09-26T15:45:02.763Z</u:Expires></u:Timestamp>
obtenemos:
ec6f25fe2928042e7fba1f6b677c52b9f6caf1dd
hasta aqui todo bien, luego a este hash le hacemos base64, nos dá:
ZWM2ZjI1ZmUyOTI4MDQyZTdmYmExZjZiNjc3YzUyYjlmNmNhZjFkZA==
que no concuerda con el valor que tiene el request:
5dsghtYrY4kzB/4NrESIrCjan3M=
:?:
Creo que aqui puede estar el problema
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por Dado »

Si lo se!! es exactamente el problema que tengo, no coinciden los sha1

Ahora, por lo que he estudiado, al parecer se trata de una cosa que debemos aplicar y que se llama canonizaion, y creo que debido al namespace que tiene (u:) debe incluirse tambien en el nodo al momento de canonizarlo

Aqui es donde he visto esto del canon

nota como dice en la pagina de referencia :
"C14N is complicated. Really complicated. You just won't believe how vastly, hugely, mindbogglingly complicated it is."

Traduccion: "es complicado, realmente muy complicado, no creeras los vasto, inmenso, complicado que es"
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por crono81 »

De acuerdo Dado, ya logré un avance, el problema no es la canonización, es problema en el propio sha1, te comento, nosotros tratabamos de obtener la base64 del hash representado en ascii, lo cual está mal, debe ser la base64 del hash en binario, ya obtengo un DigestValue de la longitud que muestra el request, yo uso openssl y lo resolví así:

Código: Seleccionar todo

openssl dgst -sha1 -binary "D:\Proyectos\Varios\post web\DescargaSatWS\sign.txt" | openssl enc -base64 -A
Lo cual ya me dá el resultado deseado, ahora sigue el SignatureValue, el cual veo en otro foro, que se obtiene de otros datos y no del timestamp como comentabamos antes, dejo la liga:
https://social.msdn.microsoft.com/Forum ... evelopment
La información que interesa de ahi es esta:
For future information seekers, here's what worked for me.

1. Digest value - canonicalize the timestamp xml, do a simple SHA1 hash on it.

2. Place the digestvalue in the 'signedInfo' and canonicalize the SignedInfo XML.

3. Calculate a derived PSHA1 key based on the trust:BinarySecret of the original token request ('main' key) and the trust:BinarySecret (seed/nonce/secondary key) of the token response.

4. Hash the binary version of the base64 of your canonicalized signedxml as HMACSHA1, with the derived key as the secret, and turn the result hash back into Base64, that's your SignatureValue
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por Dado »

crono81 escribió: .....que se obtiene de otros datos y no del timestamp como comentabamos antes, dejo la liga:.....
.....
1. Digest value - canonicalize the timestamp xml, do a simple SHA1 hash on it.
Pero ahi leo que dice que si debe ser del timestamp.......deja hago mis pruebas, la informacion que publicas abre nuevas posibilidades
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por crono81 »

Si se usa el timestamp, pero más abajo viene el ejemplo de como, algo así:
Dado el siguiente timestamp:

Código: Seleccionar todo

<u:Timestamp u:Id="_0"><u:Created>2013-05-14T14:36:53.350Z</u:Created><u:Expires>2013-05-14T14:41:53.350Z</u:Expires></u:Timestamp>
Se canoniza de la siguiente manera y se genera su hash

Código: Seleccionar todo

<u:Timestamp xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" u:Id="_0"><u:Created>2013-05-14T14:36:53.350Z</u:Created><u:Expires>2013-05-14T14:41:53.350Z</u:Expires></u:Timestamp>
Notese que le agregaron el namespace, dando como resultado wCl5ApjhfopVIDr26TvlTnoQrOo=
Este digestvalue se agrega al nodo signedinfo de la siguiente manera

Código: Seleccionar todo

<SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>wCl5ApjhfopVIDr26TvlTnoQrOo=</DigestValue></Reference></SignedInfo>
Luego este nodo SignedInfo se canoniza de esta forma

Código: Seleccionar todo

<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"></SignatureMethod><Reference URI="#_0"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></DigestMethod><DigestValue>wCl5ApjhfopVIDr26TvlTnoQrOo=</DigestValue></Reference></SignedInfo>
Notese que de nuevo agregan un namespace. Luego a este nodo canonizado se le aplica el algoritmo de cifrado, que en el ejemplo es diferente al que usamos en este webservice, dando como resultado la firma digital la cual se debe agregar al nodo SignatureValue
Edito: he de decir que ya lo intenté asi tambien, pero con error como resultado
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por Dado »

Si es lo que veo, hay que agregar los namespace "de arriba" de ese nodo.......seguimos haciendo pruebas
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 5:55 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por crono81 »

Confirmado, el hash se obtiene con el nodo timestamp agregandole el namespace, lo calculé en base al request que proporcionaste
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: Duda de Como Autentificarse en los WebService de Descarga de los XML

Mensaje por Dado »

Con una aplicacion llamada SC14N obtuve el nodo canonizado, pero ni asi consigo el hash esperado :
<u:Timestamp xmlns:o="http://docs.oasis-open.org/wss/2004/01/ ... xt-1.0.xsd" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/ ... ty-1.0.xsd" u:Id="_0"><u:Created>2018-09-26T20:36:40.520Z</u:Created><u:Expires>2018-09-26T20:41:40.520Z</u:Expires></u:Timestamp>
SHA1 en base 64 que obtengo : IJugDFYlXZnMebcxiAeHpoep7CQ=

Pero deberia tener iZr7Z5WND4/b4cPlJZj19KbtObQ=
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Cerrado