Página 8 de 18

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

Publicado: Jue Sep 27, 2018 5:05 pm
por crono81
Es correcto todo lo que mecionas, asi es el flujo de trabajo

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

Publicado: Jue Sep 27, 2018 8:29 pm
por estebanchambas
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

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

Publicado: Vie Sep 28, 2018 9:28 am
por crono81
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

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

Publicado: Vie Sep 28, 2018 9:59 am
por estebanchambas
@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

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

Publicado: Vie Sep 28, 2018 10:21 am
por estebanchambas
Será el Serial Number del Certificado en Base64 lo que va dentro de Signature Value, o sea como tengo que firmar?

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

Publicado: Vie Sep 28, 2018 10:26 am
por Dado
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

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

Publicado: Vie Sep 28, 2018 10:40 am
por estebanchambas
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

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

Publicado: Vie Sep 28, 2018 11:21 am
por crono81
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>

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

Publicado: Vie Sep 28, 2018 11:33 am
por Dado
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

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

Publicado: Vie Sep 28, 2018 12:11 pm
por estebanchambas
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>