none
Firmar XML con XAdES-EPES

    Pregunta

  • Buenas tardes, he estado trabajando arduamente durante los últimos dos meses en un desarrollo de Facturación Electrónica (especificamente para el caso de Costa Rica), ya tengo avanzado el proyecto en un 95% aproximadamente pero estoy detenido desde hace varias semanas en la parte final que es la Firma XAdES EPES que se aplica al documento XML de la Factura Electrónica, la documentación que he encotrado es poca, desactualizada, muy confusa y a veces hasta contradictoria, por lo que el avance a este respecto ha sido muy lento.

    En este foro he revisado algunas colaboraciones de usuarios con respecto a otras preguntas del mismo tema, me han ayudado un poco sin embargo todas las respuestas estan orientadas a .NET haciendo uso de las funciones propias del lenguaje pero por requerimientos ajenos a mi voluntad estoy programando en un lenguaje muy antiguo (VFP 9.0 shame on me!!!) que no posee funciones propias para trabajar con firmas digitales, por lo que he tenido que programar todo desde cero haciendo llamadas de lineas de comando usando el archivo externo openssl.exe, sin embargo ya todas estas dificultades han sido superadas y estoy detenido especificamente en la obtención de los digest values correctos para las siguientes porciones del Signature:

    • <xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod><ds:DigestValue>¿¿¿¿¿de donde obtengo este digest?????</ds:DigestValue>........Segun lo que he estado investigando este proviene de realizar el digest con sha1 del archivo de certificado .p12 (ojo, mi certificado es un archivo portatil y no esta en el almacen de certificados de windows) pero no estoy seguro de esto. Uso el siguiente comando para obtenerlo: openssl.exe dgst -binary -sha1 certificado.p12 | openssl enc -base64 -out certdigest.txt. En un momento anterior entendi que debo hacer el digest de la porción <ds:KeyInfo><ds:X509Data><ds:X509Certificate> del signature, pero nada me ha dado resultados y estoy perdido en este punto.
    • <xades:SigPolicyHash><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></ds:DigestMethod><ds:DigestValue>¿¿¿¿¿¿¿De donde obtengo este digest???????</ds:DigestValue>......Al igual que el digest anterior, con este estoy meramente asumiendo que debo hacer el digest del archivo descargado del link mencionado en <xades:SigPolicyId><xades:Identifier> https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.1/Resolucion_Comprobantes_Electronicos_DGT-R-48-2016.pdf</xades:Identifier></xades:SigPolicyId>, pero tampoco estoy seguro, ademas resulta que este link esta roto, y el mencionado archivo nisiquiera lo puedo descargar. He descargado otro similar desde otro link pero tampoco me funciona, como pueden ver tambien estoy perdido.

    Los demas DigestValues los tengo relativamente claros y algunos ya validados como correctos (SignedInfo, SignatureValue, X509Certificate, sin embargo algunos digests dependen de estos 2 problematicos por lo que no he podido avanzar mas alla.

    Otro punto critico son las reglas de canonicalizacion, las cuales son un dolor de cabeza pero creo haber lidiado manualmente con ellas de manera mas o menos correcta, pero ya eso es otro tema.

    Como podrán ver mi problema es mas procedimental de la firma que del lenguaje de programación, por lo que me vendria bien la ayuda de cualquiera de ustedes colaboradores entendidos en esta materia de Firmas Digitales que tuviera a bien explicarme por esta via de donde obtener los digest mencionados. Realmente no necesito ejemplos de programación (ya he visto bastantes en .net) sino mas bien una explicación procedimental del metodo.

    Ya tengo claro cuales son los comandos del openssl para obtener los digest, tengo claro la encriptacion a usar, lo que me falta realmente es de donde obtenerlos?

    Gracias.


    • Editado Gregorik Domador viernes, 29 de diciembre de 2017 17:36 Correcion link pdf
    viernes, 29 de diciembre de 2017 17:31

Todas las respuestas

  • Y seguirás con dolor de cabeza si continuas por esa senda amigo, lo mejor es hacerlo en c#, generar la libreria para que la puedas consumir desde foxpro o en su defecto en java usando la librería xades4j.

    Yo intente hacer los mismo que tu en foxpro firma xmldsig, pero desistí y opte por realizarla en .net y generar la libreria. 

    Pero no hay nada imposible. por privado tal ves te pueda ayudar, he trabajado en la firma xades epes para DIAN colombia.

    Saludos

    viernes, 29 de diciembre de 2017 18:46
  • Gracias por tu respuesta amigo, pero como ya comente mi problema no es el lenguaje, ya tengo todo echo en Foxpro, ya genero el XML y la firma completa pero no logro validarla ante Hacienda CostaRica (me responde Firma Inválida) porque sospecho que estos 2 digest son incorrectos, necesito solamente la parte "procedimental", una explicación directa y concreta de donde sacar estos digest.

    Yo tambien tuve experiencia con Colombia y Ecuador, realice ambas Facturaciones Electronicas pero usando DFacture como intermediario (super fácil) y asi ni siquiera tuve que lidiar con este problema de la Firma Electronica, pero para Costa Rica lo estoy haciendo directo contra Haciena y es primera vez que me enfrento con estas Firmas Electrónicas.

    viernes, 29 de diciembre de 2017 19:01
  • Te comento porque yo también tengo mi ERP en Peru en foxpro, el generado del xml y envio a la administración tributaria, pero el proceso de firma tuve que realizar la dll en .net. (XMLDSIG en peru o firma basica) En el caso de peru y colombia  he trabajado directamente con el ws  de sus administraciones tributarias. En todo caso si insistes por ese camino te aconsejo que sigas los foros mexicanos alli me parecen que han lograron hacerlo integramente en foxpro (con ayuda  de openssl) claro que no es xades-epes.

    Saludos y suerte

     
    viernes, 29 de diciembre de 2017 19:13
  • Tal vez esto te pueda ayudar.

    https://github.com/josemmo/Facturae-PHP

    Saludos


    viernes, 29 de diciembre de 2017 19:25
  • Hola Gregorik, tambien he estado intentando hacer que me Hacienda (CR) me acepte esta firma y no hay manera.. me sigue respondiendo:

    La firma del comprobante electrónico no es válida

    He intentado de todo. Pudiste resolverlo de alguna manera? Cualquier informacion en este momento es de gran ayuda. Gracias

    domingo, 4 de marzo de 2018 15:58
  • Hola, me gustaría saber cómo agregaste el certificado dentro del documento xml y que la DIAN lo pudiera validar.

    Gracias

    martes, 6 de marzo de 2018 17:17
  • Buen dia, Jose me gustaria que me ayudara con el tema de la firma para la DIAN colombia... estoy trabajando en C#... cualquier ayuda es bienvenida.
    martes, 6 de marzo de 2018 17:40
  • Saludos, 

    Lograstes hacer la firma desde .net?, me puedes ayudar?

    viernes, 9 de marzo de 2018 5:17
  • Saludos,

    Lograstes firmar la factura con .net?, me puedes ayudar con este tema?

    viernes, 9 de marzo de 2018 5:17
  • Jose buenas tardes, estoy como atascado con el tema de la firma digital, el servicio de la dian siempre me retorna que no es válida, no se si el tema es de como se están asignando los prefijos o de como se guarda el xml firmado. Me puede ayudar con algun tip para solucionar esto, muchas gracias
    jueves, 17 de mayo de 2018 18:11
  • Hola José! me encuentro trabajando en la implementación c# del firmado del xml, para dian colombia. No obstante tengo un error que me reportan desde la dian luego de trasmitir la factura: "com.indra.mmdd.signature.exceptions.ValidateException: xades4j.verification.ReferenceValueException: Reference '' cannot be validated".

    Quizás si puedas orientarme en que podría estar originando dicho error me sería muy útil ya que desde la dian el soporte en nulo.

    Mil gracias por tu ayuda.

    martes, 29 de mayo de 2018 21:12
  • si ponen el xml de la firma les podria decir que les falta.

    Saludos

    miércoles, 6 de junio de 2018 14:37
  • Hola,

    La DIAN me el siguiente error:

    "com.indra.mmdd.signature.exceptions.ValidateException: xades4j.verification.ReferenceValueException: Reference '' cannot be validated".

    Y no sé que puede estar fallando.

    Y la firma que se envía es la siguiente:

        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7">
              <ds:SignedInfo>
                <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                <ds:Reference Id="xmldsig-3a6529b8-2674-424f-b907-d601b9b5aee0-ref0" URI="">
                  <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                  </ds:Transforms>
                  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                  <ds:DigestValue>Pk733bC0e9ZTEwWw2jb9MZoG2gk=</ds:DigestValue>
                </ds:Reference>
                <ds:Reference URI="#xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7-keyinfo">
                  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                  <ds:DigestValue>4gn73PBVP3iSXzW1td578XKW354=</ds:DigestValue>
                </ds:Reference>
                <ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7-signedprops">
                  <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                  <ds:DigestValue>2OKuaYOniGKR/+RStBDWf8J2ldY=</ds:DigestValue>
                </ds:Reference>
              </ds:SignedInfo>
              <ds:SignatureValue Id="xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7-sigvalue">BAQNahqUVUAdyUg9yOXFCvOs6is6uHV5b1aLnFiXQZCAc/uomfKl5yozjzGtQSXaKptyjIxRVbHyqQ75bLYL/RupZekNDQ92j0py9EWU9M2Lq1ihIUicP4+rQMVo2N8BhojOI/osMqJzJoMfYlCGpQHkVhPWJ5Vg/S6WeRHaXYpYOe3qIt+zhzgPL5H+IUODCcqZo/Kec1GevjBbmZNyUCdQ2YTs3zMGtZxsZoeyGbxIbxCEI3cZ9wzQfW+//QnpCLfb1lZWouE+bm/YbzdOmHVa2zxgXQH0Zn9ozhEksnV+5vdjZUDYrVUYy5AKVLYs9uV+Ha3F+jp3iY2kvFlBvw==</ds:SignatureValue>
              <ds:KeyInfo Id="xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7-keyinfo">
                <ds:X509Data>
                  <ds:X509Certificate>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</ds:X509Certificate>
                </ds:X509Data>
              </ds:KeyInfo>
              <ds:Object Id="XadesObjectId-57c83713-0c6b-4fee-a014-f6fce7771256">
                <xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Id="QualifyingProperties-bf9526b6-a7e1-4fc9-849f-bcc26c23b769" Target="#xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7">
                  <xades:SignedProperties Id="xmldsig-0afd79f9-d328-4cb1-9477-6a59cb8b75d7-signedprops">
                    <xades:SignedSignatureProperties>
                      <xades:SigningTime>2018-06-18T15:26:23+02:00</xades:SigningTime>
                      <xades:SigningCertificate>
                        <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>BECSTEFTGWGMYFSFICZ1WJd4UV0=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD., OU=Division de certificacion entidad final, CN=CA ANDES SCD S.A. Clase II, E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>854619789523300423</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>
                        <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>ydBrkDUi4OLwpDJACttO8PSuHdE=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD, OU=Division de certificacion, CN=ROOT CA ANDES SCD S.A., E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>8136867327090815624</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>
                        <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>OXeITae4OgBq7RWNUGqshhvKGk8=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD, OU=Division de certificacion, CN=ROOT CA ANDES SCD S.A., E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>3184328748892787122</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>
                      </xades:SigningCertificate>
                      <xades:SignaturePolicyIdentifier>
                        <xades:SignaturePolicyId>
                          <xades:SigPolicyId>
                            <xades:Identifier>https://facturaelectronica.dian.gov.co/politicadefirma/v1/politicadefirmav1.pdf</xades:Identifier>
                            <xades:Description>Política de firma para facturas electrónicas de la República de Colombia.</xades:Description>
                          </xades:SigPolicyId>
                          <xades:SigPolicyHash>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>61fInBICBQOCBwuTwlaOZSi9HKc=</ds:DigestValue>
                          </xades:SigPolicyHash>
                        </xades:SignaturePolicyId>
                      </xades:SignaturePolicyIdentifier>
                      <xades:SignerRole>
                        <xades:ClaimedRoles>
                          <xades:ClaimedRole>supplier</xades:ClaimedRole>
                        </xades:ClaimedRoles>
                      </xades:SignerRole>
                    </xades:SignedSignatureProperties>
                  </xades:SignedProperties>
                </xades:QualifyingProperties>
              </ds:Object>
            </ds:Signature>

    lunes, 18 de junio de 2018 14:30
  • Hola Compañeros... Me encuentro en la implementación de Facturación electrónica con la Dian de Colombia y tengo el mismo problema con la Firma del XML,  estoy utilizando la libreria de FirmaXadesNet.dll  y la DIAN me arroja el error 

    com.indra.mmdd.signature.exceptions.ValidateException: xades4j.verification.ReferenceValueException: Reference '' cannot be validated

    Alguien ha podido resolver el problema?

    martes, 14 de agosto de 2018 20:31
  • Buenas tardes,

    También estoy realizando la firma en C# y quería saber como estas manejando el tema para que te genere estos tres tags:

    <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>BECSTEFTGWGMYFSFICZ1WJd4UV0=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD., OU=Division de certificacion entidad final, CN=CA ANDES SCD S.A. Clase II, E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>854619789523300423</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>
                        <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>ydBrkDUi4OLwpDJACttO8PSuHdE=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD, OU=Division de certificacion, CN=ROOT CA ANDES SCD S.A., E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>8136867327090815624</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>
                        <xades:Cert>
                          <xades:CertDigest>
                            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                            <ds:DigestValue>OXeITae4OgBq7RWNUGqshhvKGk8=</ds:DigestValue>
                          </xades:CertDigest>
                          <xades:IssuerSerial>
                            <ds:X509IssuerName>C=CO, L=Bogota D.C., O=Andes SCD, OU=Division de certificacion, CN=ROOT CA ANDES SCD S.A., E=info@andesscd.com.co</ds:X509IssuerName>
                            <ds:X509SerialNumber>3184328748892787122</ds:X509SerialNumber>
                          </xades:IssuerSerial>
                        </xades:Cert>

    Te agradezco me puedas colaborar,

    miércoles, 15 de agosto de 2018 18:41
  • Estoy en el mismo punto con la DIAN. ¿De dónde salen los valores de los Digest? Tengo todo lo demás validado y correcto, lo único que me falla es la firma que en la respuesta del WS me dice "firma inválida o revocada". Obviamente la documentación de la DIAN es nula al respecto.
    martes, 21 de agosto de 2018 19:12
  • He estado ajustando los módulos c# FirmaXadesNet45 y hay que hacer varias modificaciones para que genere los nodos de firma de la misma manera que lo hace xades4j de Java. Hay que quitar algunos nodos y agregar otros, cambiar el método de firma de Sha1 a Sha512 y Sha256, además la política de firma ya cambio de versión (politicadefirmav1.pdf), ahora politicadefirmav2.pdf. 

    De todas maneras todavía no me ha funcionado, pero parece que alguien ya lo pudo solucionar, al final del siguiente enlace el amigo Anderson H tiene algo:

    https://social.msdn.microsoft.com/Forums/es-ES/a95e08e3-5181-43ad-b736-ebf5969a722f/firmar-xml-factura-dian-colombia-xadesepes?forum=vcses


    sábado, 25 de agosto de 2018 14:50
  • Hola yo lo logre asi

    1 Instale esta nuget

    2. Cosntruyo mi documento xml (Datos Validos de emisor y receptor, Fecha Formato UTc , consistencia entre monto facturado e impuestos etc)

    3. Firmo el documento de esta forma :

           public XmlDocument  XadesEpesFirma(XmlDocument documentoXml , string pathCertificado , string pinCertificado)
            {
                var xadesService = new XadesService();
                X509Certificate2 MontCertificat = new X509Certificate2(ConvertirCertificadoEnBytes(pathCertificado) , pinCertificado);
                try
                {
                    var parametros = new SignatureParameters
                    {
                        SignaturePolicyInfo = new SignaturePolicyInfo
                        {
                            PolicyIdentifier = Valor.IdentificadorPolitica(),
                            PolicyHash = Valor.HashPolitica()
                        },
                        SignaturePackaging = SignaturePackaging.ENVELOPED,
                        InputMimeType = EngineData.text_xml,
                    };
    
                    using (parametros.Signer = new Signer(MontCertificat))
                    {
                        using (MemoryStream fs = new MemoryStream())
                        {
                            documentoXml.PreserveWhitespace = true;
                            documentoXml.Save(fs);
                            fs.Flush();
                            fs.Position = 0;
                            var docFirmado = xadesService.Sign(fs, parametros);
                            documentoXml = docFirmado.Document;
                        }
                    }
                }
                catch(Exception ex)
                {
                    throw new Exception("Error en metodo XadesEpesFirma", ex);
                }
                documentoXml.Save(@"C:\Users\Public\Documents\" + EngineDocumentoXml.NombreDocumentoXml(documentoXml));
                return documentoXml;
            }
    
            private byte[] ConvertirCertificadoEnBytes(string pathCertificado)
            {
                byte[] certificadoBytes = System.IO.File.ReadAllBytes(pathCertificado);
                return certificadoBytes;
            }


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    sábado, 25 de agosto de 2018 17:35
  • Para los que está buscando la solución, ya está publicada la librería en GitHub:

    https://git.io/fAa00
    • Editado Anderson H lunes, 10 de septiembre de 2018 4:25
    domingo, 9 de septiembre de 2018 14:27