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........
Cerrado
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 »

crono81 escribió:Confirmado, el hash se obtiene con el nodo timestamp agregandole el namespace, lo calculé en base al request que proporcionaste
Yo estoy intentandolo hacer mediante CURL, he estado leyendo y asi es como lo llevo hasta ahora:

Código: Seleccionar todo

curl -v header "Content-Type: text/xml;charset=UTF-8" --header "[Request-Line]: POST /Autenticacion/Autenticacion.svc HTTP/1.1" --header "Content-Type: text/xml; charset=utf-8" --header "SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica" --header "Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx" --header "Accept-Encoding: gzip-deflate" --data @SOAPEnvelopeSAT.xml https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc
Se que en esta linea, falta inyectarle el Certificado y la contraseña, He leído que cual no acepta certificados PFX y debo de incluir los certificados en formato PEM? Cierto?, donde pongo

Código: Seleccionar todo

@SOAPEnvelopeSAT.xml
allí pongo adonde tengo guardado el SOAPEnvelope. Como ven?

Hasta donde tengo entendido, solo si todo es correcto, me debe de arrojar alguna resultado. Si no no va a arrojar ni un error ok?
o no se si necesito usar otro flag. por el momento para ver que onda lo corro en modo Verbose "-v".

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 »

Tienes 2 namespaces de mas, debe ser esto

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>
Ya sólo estoy atorado en la firma, me sigue arrojando error
Última edición por crono81 el Mié Sep 26, 2018 4:48 pm, editado 1 vez en total.
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 »

Esteban, no tengo idea de como usar curl, pero creo que dentro del archivo SOAPEnvelopeSAT.xml, debe ya estar el certificado en formato base64
Avatar de Usuario
Dado
Mensajes: 15980
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 las reglas de canonizacion debe llevar todos los namespace, aqui una imagen

Y ademas deben estar ordenadas alfabeticamente

Ademas no creas, ya intente con uno , dos , tres namespace, al derecho y alrevez, ya lo intente todo, pero sigo con el mismo error
Adjuntos
Untitled.png
Untitled.png (53.29 KiB) Visto 9642 veces
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 »

Con OpenSSL me sale bien además probé en otra pagina: https://hash.online-convert.com/sha1-generator
y ahi tambien me da el resultado que buscas:
iZr7Z5WND4/b4cPlJZj19KbtObQ=
Con este 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>
Edito: pudiera ser el caso de algun (subtipo por asi decirlo) de canonización
Edito2: entonces pudiera ser que en la firma me falte algun namespace
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

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

Mensaje por Dado »

LO TENGO !

Por fin, pude conseguir el dichoso token, lo malo es que eso no es ni la cuarta parte de todo el proceso para la descarga ya final.

@crono81 te debo varias, por supuesto que tambien a @Halcon Divino

Es esa mendiga canonizacion de mier...coles, tenias razon, nos faltaba un namespace y una regla de C14N* que dice que si tienes un nodo asi <nodo atributo="valor"/> lo debes expander asi <nodo atributo="valor"></nodo>

Te pongo el codigo Delphi de lo que debes firmar, solo inserta en el placeholder %DigestValue% el SHA1.Base64

Código: Seleccionar todo

resourcestring
CanonicalSignedInfo =
'<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#rsa-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>%DigestValue%</DigestValue>' +
	'</Reference>' +
'</SignedInfo>';
Intentalo y dame la buena noticia de que a ti tambien te funciono :D

______________________________
*Le llaman C14N porque segun CanonicalizatioN se compone de una C, luego 14 letras y al final una N.......lo que va uno aprendiendo en el camino
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Halcon Divino
Mensajes: 164
Registrado: Vie Nov 25, 2011 3:12 pm

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

Mensaje por Halcon Divino »

AYUDA PARA LOS QUE DESARROLLAMOS EN VISUAL STUDIO C#

Estoy haciendo ya el NUEVO Proyecto en Windows FORM que va a descargar los XML … obviamente estoy tomando como base el proyecto de consola que postee en este hilo.

Estaba analizando el proyecto de consola SAT-WS ... estoy viendo que no tiene Referencias Web lo que tiene es un Connected Services entonces estoy entendiendo que nunca podre agregar las urls de los WS por medio de las referencias web.

Hasta lo que yo se estos WS son de tipo "WCF" o "Windows Communication Foundation" y las urls se tienen que agregar por medio de Connected Services


Lo que no se como hacerlo .nunca he usado los SERVICIOS CONECTADOS ( Connected Services )


Encontré este blog que aparentemente explica como hacerlo pero no se si este yo en lo correcto .... quizás estoy equivocado .

https://blogs.msdn.microsoft.com/webdev ... -projects/

El problema que tuve es que al seguir los pasos de este blog me tope con que no encuentro la Extensión Visual Studio WCF Connected Service para descargarla e instalarla y pues ya no pude seguir con los demás pasos ... según yo si estoy cumpliendo con los PRE REQUISITOS que indica el blog.

Quien ya lo hizo ….. Alguien que me pueda explicar como agregar las 4 urls de los WS del SAT a los SERVICIOS CONECTADOS ( Connected Services )
Saludos
Halcón Divino

Monterrey
Nuevo León
México
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 »

Muchachos, estoy contento!!!!!, me he estado documentando en base al funcionamiento de CURL, en base a los Request Headers que salen del programa mágico de Halcón DIvino, en mi SOAPENVELOPEHeader, me queda claro que debe de ir mi certificado en Base64, pero antes de hacer todo este merequetengue quería estar seguro de que esté usando las configuraciones adecuadas con SOAP para interectuar con el WebService.

Y parece ser que ya le di al clavo, Obvio usé el Request.xml que publicaron, aunque obviamente no va a coincidir, puesto que debe de llevar el certificado, formas y bla bla bla, pero si las configuraciones son correctas, Debería obtener ese error como una respuesta del servidor no??

Y eso fue precisamente lo que obtuve!!.

Estos son los Parámetros que le pasé a curl:

Código: Seleccionar todo

curl -v --header "Content-Type: text/xml; charset=utf-8" --header "SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica" --header "Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx" --header "Content-Length: 3912" --header "Expect: 100-continue" —header "Accept-Encoding: gzip-deflate" --header "Connection: Keep-Alive" -E ./CED130828MJ8.pem:MiContraseña --data @SOAPEnvelopeSAT.xml https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc
Y esta fue la respuesta que obtuve del Webservice:
* Rebuilt URL to: —header/
* IDN support not present, can't parse Unicode domains
* Could not resolve host: —header
* Closing connection 0
curl: (6) Could not resolve host: —header
* Rebuilt URL to: Accept-Encoding: gzip-deflate/
* Port number ended with ' '
* Closing connection -1
curl: (3) Port number ended with ' '
* Trying 40.124.2.194...
* TCP_NODELAY set
* Connected to cfdidescargamasivasolicitud.clouda.sat.gob.mx (40.124.2.194) port 443 (#1)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=MX; ST=Distrito Federal; L=Mexico; O=Servicio de Administraci?n Tributaria; CN=*.clouda.sat.gob.mx
* start date: Dec 26 16:50:05 2016 GMT
* expire date: Dec 27 16:50:05 2018 GMT
* subjectAltName: host "cfdidescargamasivasolicitud.clouda.sat.gob.mx" matched cert's "*.clouda.sat.gob.mx"
* issuer: C=US; O=Trend Micro Inc; CN=Trend Micro S2 CA
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7f933800bc00)
> POST /Autenticacion/Autenticacion.svc HTTP/2
> Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: text/xml; charset=utf-8
> SOAPAction: http://DescargaMasivaTerceros.gob.mx/IA ... /Autentica
> Content-Length: 3912
> Expect: 100-continue
> Connection: Keep-Alive
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 100
* We are completely uploaded and fine
< HTTP/2 500
< content-type: text/xml; charset=utf-8
< server: Microsoft-IIS/10.0
< x-powered-by: ASP.NET
< date: Thu, 27 Sep 2018 05:14:45 GMT
< content-length: 347
<
* Connection #1 to host cfdidescargamasivasolicitud.clouda.sat.gob.mx left intact
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelop ... <faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/ ... aultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>
Para esto antes de hacer esto, Tuve que generar un Certificado PFX en base al CER y al KEY usando OpenSSL y posteriormente transformar este PFX en un PEM, con esta instrucción:
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
Y así luce el mensaje de respuesta sin usar el Verbose:

Código: Seleccionar todo

bash-3.2# curl --header "Content-Type: text/xml; charset=utf-8" --header "SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica" --header "Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx" --header "Content-Length: 3912" --header "Expect: 100-continue" —header "Accept-Encoding: gzip-deflate" --header "Connection: Keep-Alive" -E ./CED130828MJ8.pem:Constructora2013 --data @SOAPEnvelopeSAT.xml https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/Autenticacion/Autenticacion.svc
curl: (6) Could not resolve host: —header
curl: (3) Port number ended with ' '
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>bash-3.2# 
Yo digo que ya está leyendo el SOAPENVELOPE, puesto que cuando no tenia todas las flags, no arrojaba nada y ahora si ya detecta el contenido.
Como ven?, espero les sirva a alguien, yo seguiré trabajando en esto.

La idea de que use curl, es que es algo que es accesible en varios lenguajes y Sistemas Operativos (Windows, Linux y Mac), hasta en Amiga, jajajajajaja obvio no se trata de correrlo en un ATARI, pero pues si correrlo en la mayoría de sistemas.

Saludos y muchas gracias
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 »

Me di cuenta de que funciona mucho mejor cambiando las flag --header por -H, ya se que es la misma etiqueta, pero al usar esta me quito el error de Header, quedando asi:
curl -v -H "POST /Autenticacion/Autenticacion.svc HTTP/1.1" -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: http://DescargaMasivaTerceros.gob.mx/IA ... /Autentica" -H "Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx" -H "Content-Length: 3912" -H "Expect: 100-continue" -H "Accept-Encoding: gzip-deflate" -H "Connection: Keep-Alive" -E ./CED130828MJ8.pem:ContraseñaPrivada --data @SOAPEnvelopeSAT.xml https://cfdidescargamasivasolicitud.clo ... cacion.svc
Y me da el siguiente resultado, obvio marcándome el error de "An error occurred when verifying security for the message"

Asi:

Código: Seleccionar todo

*   Trying 40.124.2.194...
* TCP_NODELAY set
* Connected to cfdidescargamasivasolicitud.clouda.sat.gob.mx (40.124.2.194) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=MX; ST=Distrito Federal; L=Mexico; O=Servicio de Administraci?n Tributaria; CN=*.clouda.sat.gob.mx
*  start date: Dec 26 16:50:05 2016 GMT
*  expire date: Dec 27 16:50:05 2018 GMT
*  subjectAltName: host "cfdidescargamasivasolicitud.clouda.sat.gob.mx" matched cert's "*.clouda.sat.gob.mx"
*  issuer: C=US; O=Trend Micro Inc; CN=Trend Micro S2 CA
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x7fc8c900aa00)
> POST /Autenticacion/Autenticacion.svc HTTP/2
> Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: text/xml; charset=utf-8
> SOAPAction: http://DescargaMasivaTerceros.gob.mx/IAutenticacion/Autentica
> Content-Length: 3912
> Expect: 100-continue
> Accept-Encoding: gzip-deflate
> Connection: Keep-Alive
> 
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 100 
* We are completely uploaded and fine
< HTTP/2 500 
< content-type: text/xml; charset=utf-8
< server: Microsoft-IIS/10.0
< x-powered-by: ASP.NET
< date: Thu, 27 Sep 2018 05:55:47 GMT
< content-length: 347
< 
* Connection #0 to host cfdidescargamasivasolicitud.clouda.sat.gob.mx left intact
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode><faultstring xml:lang="en-US">An error occurred when verifying security for the message.</faultstring></s:Fault></s:Body></s:Envelope>bash-3.2# 
También asi ya me doy cuenta que ahora en el Log del Verbose que estoy publicando lo siguiente:

Código: Seleccionar todo

* Connected to cfdidescargamasivasolicitud.clouda.sat.gob.mx (40.124.2.194) port 443 (#0)
Y esta otra linea:

Código: Seleccionar todo

* successfully set certificate verify locations:
Bueno, por esta parte ya me siento mas tranquilo al haber recibido señal de vida del Webservice mediante CURL, ahora viene la parte bonita, armar el Ensobretado del SOAP que es lo que ustedes han estado haciendo.

Saludos
Avatar de Usuario
Dado
Mensajes: 15980
Registrado: Mar Jul 06, 2010 7:56 pm

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

Mensaje por Dado »

@estebanchambas

Segun yo no deberias enviar este header

Código: Seleccionar todo

--header "Content-Length: 3912"
Eso indica el tamaño en bytes del mensaje SOAP que estas enviando, pero puede variar y creo que CURL te calcula automaticamente este valor y lo envia

El problema es que si no es correcto puedes estar cortando el SOAP o enviando informacion de mas, haz tus pruebas y checalo

Y si, obtener el error "An error occurred when verifying security for the message" aunque no lo parezca ya es un avance importante, ya por lo menos te estas conectando y estas recibiendo una respuesta
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Cerrado