Página 1 de 2
Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 9:31 am
por jorgesolano92
Buen día, primero que nada se que esto no tiene que ver con el sitio, pero ya no tengo mas manera de abordar el tema...
Explico: se nos ha asignado a un equipo de trabajo la realización de una aplicación muy sencilla donde se debe notificar un recorrido al ministerio de transporte en españa, dicho ministerio nos ha proporcionado un pdf donde explican un poco como debemos informar dichos datos y el endpoint, mas abajo en el documento se nos da un ejemplo del xml que debemos enviar, y asumo que debemos cambiar ciertos campos como el BinarySecurityToken, colocando allí lo que sería la parte pública del certificado (.p12 convertido a pem y usando la parte publica del mismo, lo que sería el .crt), se comenta esto "
El mensaje SOAP se enviará junto con los datos de firma digital XML resultante de la firma del nodo “soapenv:Body” y un “BinarySecurityToken” que contenga la parte pública del certificado utilizado.", pero realmente es primera vez que hacemos esto y la gente del ministerio no nos aportan pistas para realizar esta firma, luego en el mensaje de respuesta siempre me dice lo mismo: no WS-Security results.
Voy a adjuntar lo que tengo a ver si es posible guiarme un poco en lo que se tiene que hacer, muchas gracias.
Al hacer "canonicalized" al nodo soapenv:Body me genera algo así:
No se si está correcto, o si estoy haciendo todo mal.
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 9:44 am
por Dado
Mmmmh, es el mismo procedimiento que usamos aqui en Mexico para firmar la solicitud de cancelacion de una factura electronica.
Deja le doy una revisada y mas adelante te envio otro mensaje
Y no, la "canonicalized" no es lo que muestras, lo que muestras ya es el digest ...
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 9:48 am
por jorgesolano92
Ciertamente mi estimado, es el DigestValue, gracias por la aclaración, estoy atento a cualquier comentario.
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 2:25 pm
por Dado
Existen certificados de prueba publicados que puedas compartir ?
(Pruebas, o como dice en el manual, "Integracion")
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 3:18 pm
por jorgesolano92
Hola, a qué te refieres con certificado? Al archivo .pem? O a otro xml que contenga información ya validada? En este último caso solo tenemos ese xml que está en el manual, nos han escrito solo que falta el signaturevalue, asumiré que el digestvalue es el resultante de la digestión del nodo soapenv:body que ellos dan de ejemplo.
Pero la verdad es que no sé cómo obtener el signaturevalue, desde php utilizo domdocument para leer el xml y obtener el nodo body, lo canonicalizo y luego hago un sha1 y lo convierto a base64, pero el valor resultante no es el mismo que está en el doc de ejemplo. De ahí no se que hacer para obtener el signaturevalue, ya que he leído que es un valor resultante de convertir a base64 el hash resultante, he de suponer que con eso se refieren al digestvalue? O estoy equivocado en todo? Estoy que me vuelvo loco con esto ya que no manejo este tema pero nada nada..
Agradezco que me estés leyendo.
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 3:38 pm
por Dado
Si, me referia al archivo PEM, ........hay alguno para hacer pruebas?
OK. Esto es lo que debes hacer
Identificar bien el nodo que debes firmar.
Canonizarlo, esto es, quitarle los espacios inecesarios, los retornos de carro, poner en orden alfabetico los nodos y los atributos. Si no es *perfectamente* canonizado entonces la firma no sera valida.
Sacar el digest, el cual puede ser MD5, SHA1, SHA256, este digest es UNICO E IRREPETIBLE, no existe (teoricamente) dos digest iguales (en realidad si pueden existir, y a esto se le llama colision pero es, como decia, extremadamente raro)
Despues debes FIRMAR EL DIGEST, si, firmas el digest, y como es unico entonces el sello digital resultante tambien es unico, para la firma se utilizar la llave privada (esta dentro del .p12)
Como decia, esta firma se parece mucho a lo que aqui hacemos para firmar un documento de cancelacion, yo aprendi como hacerlo en
esta pagina
Tambien lo hemos usado para
autenticarnos en un web service de nuestro gobierno
Tambien busca aqui en el foro "OpenSSL X509" X509 es el formato que normalmente se usa para el certificado publico, lo vas a necesitar para obtener el certificado en base64 (mas o menos como el PEM, pero sin retorno de carro) y el numero de serie, necesario para armar la firma
TAMBIEN COMENTARTE, que estos son los pasos para hacerlo "manual" y que aqui en el foro asi lo hemos hecho, pero porsupuesto hay librerias, modulos, etc que pueden hacer todo esto automatico, precisamente
www.cryprosys.net es una de esas herramientas, aunque tiene costo
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 3:46 pm
por jorgesolano92
Te adjunto el certificado, el password del .p12 es xxxxxxx por si lo necesitas, ya leo detenidamente la respuesta que me has dado, muchas gracias.
[Certificado borrado por Admin]
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 4:02 pm
por Dado
OK, borre el certificado porque tengo duda, me parece un certificado real, y no deberia estar publicado
Hago pruebas y te mando mensaje mas adelante
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 4:20 pm
por Dado
OK. Paso 1. Identificar el nodo que debes firmar.
Yo creo (nota que repetire varias veces el "Yo creo", indicando que no estoy 100% seguro, pero hago mi mejor esfuerzo) que es el nodo de <body>
Código: Seleccionar todo
<body>
<vtcservicio cgmunicontrato="079" cgmunifin="079" cgmuniinicio="079" cgmunilejano="079" cgprovcontrato="28" cgprovfin="28" cgprovinicio="28" cgprovlejano="28" direccionfin="destino" direccioninicio="origen" direccionlejano="lejano" fcontrato="2019-01-01T13:00:00" ffin="2019-12-31" fprevistainicio="2019-12-31T15:00:00" matricula="9999-ZZZ" nif="99999999R" niftitular="11111111H" nom="INTERMEDIARIO" nombtitular="TITULAR" veraz="S"/>
</body>
Re: Necesito ayuda con la generacion de DigestValue y SignatureValue
Publicado: Mar Ago 23, 2022 4:24 pm
por Dado
Paso 2. Canonizarlo. Quitar espacios inutiles, retornos de carro, ordenar alfabeticamente nodos y atributos, expander nodos
Quedaria asi :
Código: Seleccionar todo
<body><vtcservicio cgmunicontrato="079" cgmunifin="079" cgmuniinicio="079" cgmunilejano="079" cgprovcontrato="28" cgprovfin="28" cgprovinicio="28" cgprovlejano="28" direccionfin="destino" direccioninicio="origen" direccionlejano="lejano" fcontrato="2019-01-01T13:00:00" ffin="2019-12-31" fprevistainicio="2019-12-31T15:00:00" matricula="9999-ZZZ" nif="99999999R" niftitular="11111111H" nom="INTERMEDIARIO" nombtitular="TITULAR" veraz="S"></vtcservicio></body>