Bienvenido a Facturas y Respuestas.

Esperamos que encuentre la respuesta a su pregunta. Y si no, puede formularla para que los expertos de la comunidad la respondan.

Preguntar

Este blog es creado y administrado por:

Copyright - 2020

0 votos
por en Firma digital
Necesito poder validar la firma de los xml que recibimos de los proveedores de nuestro cliente, trabajo con php la parte de recepción de los xml que nuestro cliente carga al sistema, ahora, necesito poder validar la firma del xml en php, entiendo que podría hacer esto con openssl_verify, pero siempre me regresa que la firma es invalida.

Lo que le estoy pasando en los parámetros de la función openssl_verify son:

$xml = Le paso el xml que el cliente carga retirando el nodo ds:Signature. Ejemplo:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<AttachedDocument>TODO LOS DATOS DEL DOCUMENTO EXCEPTO<ds:Signature></ds:Signature></AttachedDocument>

$firma = paso el valor que se encuentra en la etiqueta ds:SignatureValue. Ejemplo:
SkA32s3GeC2H0kP2f5W/2BfZ4m1PicTye8V1cAVKvi3HLLSjk79vN5Tveh902Sl2HOcxmUAdaH7h&#13;
ZGrLFeYGQWJgjDaRVQYbu3Ks5w0/egpc/MuRYlfsZQciYEuBqyK6N+w/y+hxUAlvW4MRD/915DHv&#13;
gMNPs+h4iERcCNByLz0LjMNO4TU+IHKN/v/0oQ==

$cert = paso el value de la etiqueta ds:X509Certificate de acuerdo a la especificación. Ejemplo:
-----BEGIN CERTIFICATE-----
MIIIoTcCBOmgAwIBAgIIIxD40rPKuH...
-----END CERTIFICATE-----

Al final envío el método de encriptación 'RSA-SHA256'

Quedaría la llamada así: openssl_verify($xml , $firma , $cert , 'RSA-SHA256');
Sin embargo la respuesta que devuelve es que no es válida la firma para la data.

Por eso me gustaría saber si el valor de data que se firma es otra y por eso no coincide con la firma, o si el método de encriptación es incorrecto o si los datos de certificado y firma que le estoy pasando están mal.

2 Respuestas

0 votos
por
Debes tener en cuenta que la firma de los documentos DIAN se calcula antes de insertar el elemento ublExtensions/ds:Signature, asi que en teoria, deberias eliminar ese elemento del XML antes de verificar la firma.

Yo te recomendaría que mejor uses una biblioteca específica de XMLDSig, o preferiblemente, una de Xades-Epes.

Ten en cuenta también, que debes ademas de validar el AttachedDocument, también debes Extraer el Invoice y el ApplicationResponse que vienen adentro, para verificar que si estén bien firmados
0 votos
por
Es un proceso innecesario, si la factura se proceso correctamente ya la DIAN valido la firma.

Preguntas relacionadas

...