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

Todo lo que no cabe en los demas foros........
crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 6:55 pm

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

Mensajepor crono81 » Jue Sep 27, 2018 6:05 pm

Es correcto todo lo que mecionas, asi es el flujo de trabajo

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 2:30 pm

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

Mensajepor estebanchambas » Jue Sep 27, 2018 9:29 pm

crono81 escribió:Es correcto todo lo que mecionas, asi es el flujo de trabajo

@crono81

Hola que tal, solo para confirmar.
En el SignatureValue veo que aquí dicen que va el certificado, pero que parte del certificado?
O debe de ir el modulo "<modulus>" del KEY?

Saludos

crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 6:55 pm

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

Mensajepor crono81 » Vie Sep 28, 2018 10:28 am

Esteban, te pongo el proceso completo:
Primero, obtienes el nodo timestamp

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>2018-09-26T20:36:40.520Z</u:Created><u:Expires>2018-09-26T20:41:40.520Z</u:Expires></u:Timestamp>

y le calculas el hash y lo pasas a base64 dando como resultado esto (claro que al cambiar las fechas vas a sacar un hash diferente):
iZr7Z5WND4/b4cPlJZj19KbtObQ=
Luego este hash lo incorporas al nodo signedinfo asi:

Código: Seleccionar todo

<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-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>iZr7Z5WND4/b4cPlJZj19KbtObQ=</DigestValue></Reference></SignedInfo>

Este nodo lo vas a sellar como si fuera un cfdi, lo cual te va a dar como resultado una cadena asi:

Código: Seleccionar todo

fqU4yPgeaS4ml3lykAO6FzQk/k7JMBXPXd+TH94YsJZbVIp2JXdz2iqh9ncPN9RZzP1hiWJqPXmIp+Zaxe9ylCr0x239KkI5TpRlScyZT2P+LatiXLA8kQp/eRJzk43/nPeKz3DRfXq7H8ttLqW1ZCWstLd67fXhaYhVr1wBVfsQ4YrE3Gvr3ymXKMN8k940VzE49HKH1bLPMO6VExIGvoTuziV2oaIVZACdlVcjilEEFGXQBJX0jaJ9oBjnUT0KOABjtvdfGCv/UYoa0OyNyR3ld4vFsj64Ekj+VOIx3f5a4ghde1AeJt6o4HzsEL10kzAAW2BklwqpUeWmLzeV/Q==

Esta cadena la incorporas al request, quedando así:

Código: Seleccionar todo

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
   <s:Header>
      <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
         <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>
         <o:BinarySecurityToken u:Id="uuid-7de252ad-a383-458d-a467-8aadb076df4f-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">MIIFxTCCA62gAwIBAgIUMjAwMDEwMDAwMDAzMDAwMjI4MTUwDQYJKoZIhvcNAQELBQAwggFmMSAwHgYDVQQDDBdBLkMuIDIgZGUgcHJ1ZWJhcyg0MDk2KTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMRUwEwYDVQQtEwxTQVQ5NzA3MDFOTjMxITAfBgkqhkiG9w0BCQIMElJlc3BvbnNhYmxlOiBBQ0RNQTAeFw0xNjEwMjUyMTUyMTFaFw0yMDEwMjUyMTUyMTFaMIGxMRowGAYDVQQDExFDSU5ERU1FWCBTQSBERSBDVjEaMBgGA1UEKRMRQ0lOREVNRVggU0EgREUgQ1YxGjAYBgNVBAoTEUNJTkRFTUVYIFNBIERFIENWMSUwIwYDVQQtExxMQU43MDA4MTczUjUgLyBGVUFCNzcwMTE3QlhBMR4wHAYDVQQFExUgLyBGVUFCNzcwMTE3TURGUk5OMDkxFDASBgNVBAsUC1BydWViYV9DRkRJMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgvvCiCFDFVaYX7xdVRhp/38ULWto/LKDSZy1yrXKpaqFXqERJWF78YHKf3N5GBoXgzwFPuDX+5kvY5wtYNxx/Owu2shNZqFFh6EKsysQMeP5rz6kE1gFYenaPEUP9zj+h0bL3xR5aqoTsqGF24mKBLoiaK44pXBzGzgsxZishVJVM6XbzNJVonEUNbI25DhgWAd86f2aU3BmOH2K1RZx41dtTT56UsszJls4tPFODr/caWuZEuUvLp1M3nj7Dyu88mhD2f+1fA/g7kzcU/1tcpFXF/rIy93APvkU72jwvkrnprzs+SnG81+/F16ahuGsb2EZ88dKHwqxEkwzhMyTbQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAJ/xkL8I+fpilZP+9aO8n93+20XxVomLJjeSL+Ng2ErL2GgatpLuN5JknFBkZAhxVIgMaTS23zzk1RLtRaYvH83lBH5E+M+kEjFGp14Fne1iV2Pm3vL4jeLmzHgY1Kf5HmeVrrp4PU7WQg16VpyHaJ/eonPNiEBUjcyQ1iFfkzJmnSJvDGtfQK2TiEolDJApYv0OWdm4is9Bsfi9j6lI9/T6MNZ+/LM2L/t72Vau4r7m94JDEzaO3A0wHAtQ97fjBfBiO5M8AEISAV7eZidIl3iaJJHkQbBYiiW2gikreUZKPUX0HmlnIqqQcBJhWKRu6Nqk6aZBTETLLpGrvF9OArV1JSsbdw/ZH+P88RAt5em5/gjwwtFlNHyiKG5w+UFpaZOK3gZP0su0sa6dlPeQ9EL4JlFkGqQCgSQ+NOsXqaOavgoP5VLykLwuGnwIUnuhBTVeDbzpgrg9LuF5dYp/zs+Y9ScJqe5VMAagLSYTShNtN8luV7LvxF9pgWwZdcM7lUwqJmUddCiZqdngg3vzTactMToG16gZA4CWnMgbU4E+r541+FNMpgAZNvs2CiW/eApfaaQojsZEAHDsDv4L5n3M1CC7fYjE/d61aSng1LaO6T1mh+dEfPvLzp7zyzz+UgWMhi5Cs4pcXx1eic5r7uxPoBwcCTt3YI1jKVVnV7/w=</o:BinarySecurityToken>
         <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
               <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
               <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-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>iZr7Z5WND4/b4cPlJZj19KbtObQ=</DigestValue>
               </Reference>
            </SignedInfo>
            <SignatureValue>fqU4yPgeaS4ml3lykAO6FzQk/k7JMBXPXd+TH94YsJZbVIp2JXdz2iqh9ncPN9RZzP1hiWJqPXmIp+Zaxe9ylCr0x239KkI5TpRlScyZT2P+LatiXLA8kQp/eRJzk43/nPeKz3DRfXq7H8ttLqW1ZCWstLd67fXhaYhVr1wBVfsQ4YrE3Gvr3ymXKMN8k940VzE49HKH1bLPMO6VExIGvoTuziV2oaIVZACdlVcjilEEFGXQBJX0jaJ9oBjnUT0KOABjtvdfGCv/UYoa0OyNyR3ld4vFsj64Ekj+VOIx3f5a4ghde1AeJt6o4HzsEL10kzAAW2BklwqpUeWmLzeV/Q==</SignatureValue>
            <KeyInfo>
               <o:SecurityTokenReference>
                  <o:Reference ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" URI="#uuid-7de252ad-a383-458d-a467-8aadb076df4f-1"/>
               </o:SecurityTokenReference>
            </KeyInfo>
         </Signature>
      </o:Security>
   </s:Header>
   <s:Body>
      <Autentica xmlns="http://DescargaMasivaTerceros.gob.mx"/>
   </s:Body>
</s:Envelope>

La cadena de texto enorme que está dentro de este nodo

Código: Seleccionar todo

<o:BinarySecurityToken u:Id="uuid-7de252ad-a383-458d-a467-8aadb076df4f-1" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"

es el certificado en base64

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 2:30 pm

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

Mensajepor estebanchambas » Vie Sep 28, 2018 10:59 am

@crono81.
Muchas gracias

Está muy bien explicado el proceso. Solo me queda una duda, perdón por mi ignorancia.
Nunca he sellado un CFDi, este dato de donde lo obtienes, es del CER, o del KEY?:

Código: Seleccionar todo

fqU4yPgeaS4ml3lykAO6FzQk/k7JMBXPXd+TH94YsJZbVIp2JXdz2iqh9ncPN9RZzP1hiWJqPXmIp+Zaxe9ylCr0x239KkI5TpRlScyZT2P+LatiXLA8kQp/eRJzk43/nPeKz3DRfXq7H8ttLqW1ZCWstLd67fXhaYhVr1wBVfsQ4YrE3Gvr3ymXKMN8k940VzE49HKH1bLPMO6VExIGvoTuziV2oaIVZACdlVcjilEEFGXQBJX0jaJ9oBjnUT0KOABjtvdfGCv/UYoa0OyNyR3ld4vFsj64Ekj+VOIx3f5a4ghde1AeJt6o4HzsEL10kzAAW2BklwqpUeWmLzeV/Q==

Y lleva algún tipo de SHA o de Base64?


Saludos

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 2:30 pm

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

Mensajepor estebanchambas » Vie Sep 28, 2018 11:21 am

Será el Serial Number del Certificado en Base64 lo que va dentro de Signature Value, o sea como tengo que firmar?

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

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

Mensajepor Dado » Vie Sep 28, 2018 11:26 am

El Sello digital lo tienes que calcular usando OpenSSL (o alguna libreria de criptografia)

Busca aqui en el foro, recuerdo que puse un tutorial de como hacer el sello manualmente, paso a paso, estoy hablando de mensajes de hace 8 o mas años

Solo considera que en lugar de "cadena original" se sustituye por el nodo <TimeStamp> que tanto trabajo nos costo encontrar
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 2:30 pm

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

Mensajepor estebanchambas » Vie Sep 28, 2018 11:40 am

DADO escribió:El Sello digital lo tienes que calcular usando OpenSSL (o alguna libreria de criptografia)

Busca aqui en el foro, recuerdo que puse un tutorial de como hacer el sello manualmente, paso a paso, estoy hablando de mensajes de hace 8 o mas años

Solo considera que en lugar de "cadena original" se sustituye por el nodo <TimeStamp> que tanto trabajo nos costo encontrar

ooooo

Es cierto, creo que ya vi donde está: aqui

Si, para FIRMAR una cadena DEBES USAR :

openssl dgst -md5 -out sign.bin -sign KEY.PEM CadOri.txt

Alcanzo a entender lo Siguiente.
1) Usamos openSSL como libreria de criptografia
2) usamos dgst o Digest, le metemos md5
3) Sign.bin "Voy a investigar que onda con esto"
4) Key.Pem el Archivo KEY de la FIEL o e.firma
5) CadIOri.txt el Texto a sellar, en el caso de una factura, es la cadena digital, pero en este caso me parece que tendría que ser todo el Request.xml cierto?

Seguiré estudiando esto.
Saludos

crono81
Mensajes: 118
Registrado: Lun Dic 16, 2013 6:55 pm

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

Mensajepor crono81 » Vie Sep 28, 2018 12:21 pm

En el paso 2, en lugar de usar md5 debe ser sha1
En el paso 5 no sería todo el request, sino solo el nodo

Código: Seleccionar todo

<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-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>iZr7Z5WND4/b4cPlJZj19KbtObQ=</DigestValue></Reference></SignedInfo>

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

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

Mensajepor Dado » Vie Sep 28, 2018 12:33 pm

sign.bin es el nombre del archivo con el SELLO BINARIO

Busca tambien como se convierte ese archivo a un SELLO EN BASE 64

Y si, perdon por decirlo mal, no se sella el nodo <TimeStamp>, haz caso a crono81, se sella el nodo <SignedInfo> ..... pfff es que con tanta informacion ya se me revuelven las ideas
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

estebanchambas
Mensajes: 51
Registrado: Mié Ago 08, 2018 2:30 pm

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

Mensajepor estebanchambas » Vie Sep 28, 2018 1:11 pm

DADO escribió:sign.bin es el nombre del archivo con el SELLO BINARIO

Busca tambien como se convierte ese archivo a un SELLO EN BASE 64

Y si, perdon por decirlo mal, no se sella el nodo <TimeStamp>, haz caso a crono81, se sella el nodo <SignedInfo> ..... pfff es que con tanta informacion ya se me revuelven las ideas


Jejejejejejeje
estoy bien burro, ya leí bien.

Sign.bin es el archivo de salida, resultante del Digest, de la encripcion con método SHA1, Usando la KEY de la FIEL (e.Firma), Codificando el nodo:

Código: Seleccionar todo

<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-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>iZr7Z5WND4/b4cPlJZj19KbtObQ=</DigestValue></Reference></SignedInfo>



De allí esa resultante sign.bin, deberé transformarlo a Base64, y acto seguido Inyectarlo en <SIgnature Value>


Volver a “Otros”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados