Buscar en este blog

sábado, 15 de febrero de 2014

VERIFICACIÓN DE FIRMA DTE


VERIFICACIÓN DE FIRMA DTE

Uno de los procesos fundamentales en el proceso de facturación es la posibilidad de verificar los documentos electrónicos recepcionados en el procesos de intercambio de contribuyentes. Para lograr este proceso de verificación es necesario extraer la clave publica de la firma del documento. Por lo tanto la verificación de los DTEs se basa en documentos firmados.


DEFINIR LAS CONTANTES 




SECUENCIA DE COMPROBACIÓN



































































Bueno, espero que este codigo les sirva pues fueron varias noches de analisis antes de poder sacar a la luz esta logica.



13 comentarios:

  1. Hola, tengo una duda ¿Es posible que la comprobación de firmas del XML falle solo por los espacios extras?
    La pregunta es porque transcribí este código para comprobar si es que tengo valido el DTE que he generado, pero sin embargo tu código me rechaza el DTE. Sospecho que falla la validación debido a la forma de manipular los XML porque estoy ignorando los espacios.

    Gracias!

    ResponderEliminar
    Respuestas
    1. Efectivamente, si el documento xml (DTE) es modificado en su orden, se agregan espacios o se modifica la información de alguna forma la firma es invalidada.

      Eliminar
    2. Me costó, pero lo logré. Los espacios a la hora de firmar XML son un cacho. Gracias por la ayuda de nuevo, tú y tu blog me ha sacado de varios problemas en varias ocasiones.

      Saludos!

      Eliminar
    3. Que bueno que la información te fue de utilidad. Ojo con los espacios je je je

      Eliminar
  2. Hola. ¿Podrías, por favor, adjuntar el archivo DTE sobre el cual realizaste esta validación? Al igual que en el comentario anterior, intenté generar la validación pero no me resultó... sería de mucha utilidad contar con un DTE válido de ejemplo.

    De antemano, muchas gracias

    ResponderEliminar
  3. Estimado

    Supongo que para validar un set es lo mismo con un cambio en las constantes?

    ResponderEliminar
  4. Hola Marcelo,

    Junto con saludarte, he implementado tu función para validar la firma, y me da el siguiente error "Referencia a objeto no establecida como instancia de un objeto.", en la siguiente linea

    "string Modulus = documento.SelectSingleNode(XPATH_MODULUS, ns).InnerText"

    Si me pudieras guiarnos, te lo agradecería.

    ResponderEliminar
    Respuestas
    1. Eso significa que la función SelectSingleNode no encontró el nodo y te devolvió null. En ese caso debes hacer algo como esto:

      XmlNode xMod = documento.SelectSingleNode(XPATH_MODULUS, ns);
      if(xMod != null)
      {
      string Modulus = xMod.InnerText;
      //...etc
      }

      Eliminar
  5. Hola Marcelo,

    Junto con saludarte, he implementado tu función para validar la firma, y me da el siguiente error "Referencia a objeto no establecida como instancia de un objeto.", en la siguiente linea

    "string Modulus = documento.SelectSingleNode(XPATH_MODULUS, ns).InnerText"

    Si me pudieras guiarnos, te lo agradecería.

    ResponderEliminar
  6. Me encuentro con un problema, hay proveedores que firman los DTEs por separado y después los unen en el archivo EnvioDTE firmando el envío por separado.
    Al verificar la firma global del documento EnvioDTE funciona, pero las firmas de los DTE no pasan la validación. Ahora. Si saco la información de namespace del archivo EnvioDTE las validaciones de los DTE pasan y la del documento EnvioDTE no funciona.

    :O hay alguna especificación este caso que ayude a hacer la validacion de este tipo de archivos? Les ha pasado?

    ResponderEliminar
  7. Complementando, también sirve :

    XmlNode certificate = signature.GetElementsByTagName("X509Certificate")[0];
    var dcert2 = new X509Certificate2(Convert.FromBase64String(certificate.InnerText));
    signedXml.LoadXml(signature);

    ResponderEliminar
  8. Amigos, holas... tengo una duda gigante,
    estoy en proceso de muestras impresas y me arroja estos errores:
    Error en CAF: Ha habido alguna alteracion en el CAF entregado por el SII.
    Error Tecnico: TED - Firma invalida.

    ¿Alguien sabe a que se debe esto?, ¿cuales son los posibles errores que pueden existir?.

    Espero respuestas, gracias

    ResponderEliminar
    Respuestas
    1. Estimado,
      El error se produce en dos etapas, cuando firmas el documento DTE(xml). Utilizas una logica para limpiar el nodo TED. Y la Segunda es cuando generas la representación del nodo ted. Debes limpiar y ordenar los datos de la misma forma. Si no es así te envía ese error.

      Atte.
      Marcelo Rojas Rojas

      Eliminar