Página 4 de 18
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 10:44 am
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"
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 11:09 am
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
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 11:31 am
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
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 11:41 am
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"
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 12:25 pm
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
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 1:01 pm
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
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 3:22 pm
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
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 3:34 pm
por Dado
Si es lo que veo, hay que agregar los namespace "de arriba" de ese nodo.......seguimos haciendo pruebas
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 3:52 pm
por crono81
Confirmado, el hash se obtiene con el nodo timestamp agregandole el namespace, lo calculé en base al request que proporcionaste
Re: Duda de Como Autentificarse en los WebService de Descarga de los XML
Publicado: Mié Sep 26, 2018 4:32 pm
por Dado
Con una aplicacion llamada SC14N obtuve el nodo canonizado, pero ni asi consigo el hash esperado :
SHA1 en base 64 que obtengo : IJugDFYlXZnMebcxiAeHpoep7CQ=
Pero deberia tener iZr7Z5WND4/b4cPlJZj19KbtObQ=