Firmador de XML de comprobantes electrónicos con tarjetas de Firma Digital de Costa Rica

El proyecto de un firmador libre que permite firmar documentos PDF, también permite firmar otro tipo de documentos, entre ellos XML. En la versión preliminar de lo que será la próxima actualización también permite firmar XML de Comprobantes Electrónicos si detecta las etiquetas raíz adecuadas que encabezan los documentos.

La diferencia con la firma de otros documentos XML es que los Comprobantes Electrónicos deben contener una política explícita de firma, propia del nivel XAdES-EPES y de XAdES-Baseline-B que en estos casos contiene una dirección tipo URL hacia un documento PDF con la resolución de Comprobantes Electrónicos de la versión vigente, así como un resumen (hash) del documento PDF enlazado en la URL.

Esta mejora ha sido incluida de forma preliminar para que las personas físicas que necesiten firmar comprobantes pero se les venció el certificado de Hacienda tengan una alternativa que les permita realizar este paso localmente de una manera más manual. El firmador es autónomo, no se comunica con la API de Hacienda, por lo que las personas interesadas deben conocer si su sistema, o consultar si el sistema de facturación es de un proveedor, si pueden obtener el fichero XML del comprobante sin firmar para poderlo cargar en el firmador y devolverlo al sistema para que pueda ser procesado.

La incorporación de esta mejora al firmador libre está aplicada sobre una versión preliminar de la herramienta que incluye muchos cambios desde la última publicación. La mayoría de las novedades de la próxima actualización han sido realizados por Luis Zárate, de Solvo. La versión preliminar se puede descargar desde la dirección https://firmador.libre.cr/firmador-en-pruebas.jar y requiere tener Java instalado, así como lo necesario de los instaladores de controladores del lector y tarjeta y certificados de Soporte Firma Digital. Es compatible con Windows, Linux y macOS.

Una de las nuevas características es que la aplicación detectará si existen nuevas actualizaciones y permitirá descargar y aplicar la actualización cuando esté disponible. Se espera que en los siguientes días se incorporen mejoras y correcciones adicionales a la versión preliminar, para así poder recibir pronta retroalimentación antes del lanzamiento de la versión estable más adelante.

Actualización: se ha publicado una nueva versión en https://firmador.libre.cr/firmador-en-pruebas.jar que permite firmar XML desde línea de comandos, especialmente pensado para poder firmar Comprobantes Electrónicos de forma parametrizable para automatizar este proceso y facilitar la integración en sistemas locales que dependan de la firma con la tarjeta de persona física.

Para utilizar esta versión por línea de comandos, funcionaría tanto con tarjetas como con ficheros p12, con las siguientes líneas de comando:

Para uso con tarjetas de firma digital (persona física):

echo XXXX| java -jar firmador-comprobantes.jar -dargs original.xml firmado.xml

Para uso con ficheros .p12 (persona jurídica y otros):

echo XXXX| java -jar firmador-comprobantes.jar -dargs original.xml firmado.xml llavero.p12

Los XXXX representan el PIN o contraseña y debe reemplazarse por el que corresponda. En el caso de usarlo por línea de comandos en Windows, no debe haber espacios entre el PIN y el caracter de |.

Se agradece cualquier comentario sobre los resultados obtenidos con este firmador, específicamente si el validador de Hacienda reconoce el formato las firmas correctamente y aceptando las facturas (en ambiente de pruebas o producción) y si los validadores de receptores terceros, en caso de disponer, también reconocen la firma.

7 comentarios en “Firmador de XML de comprobantes electrónicos con tarjetas de Firma Digital de Costa Rica

  1. Francisco de la Peña:

    Con mucho gusto, Álvaro. Ojalá sirva como alternativa a la contingencia para personas físicas. Ya me confirmaron que los XML firmados los reconoce la API de Hacienda cuando los suben.

  2. Carlos:

    Hola!! excelente aporte, pero me encuentro con el dilema que hacienda rechaza las facturas por que no cuentan con la sección de política de firma, el famoso Policy, no se si es algo que este realizando mal yo?

    1. Francisco de la Peña:

      Hola Carlos, en teoría esa versión del firmador agrega esa sección de política de firma. ¿Estás utilizando otro firmador diferente? ¿Tienes alguna muestra del documento? A veces puede haber problemas con las referencias mal diseñadas, pero tengo reportes de que al menos en ambiente staging sí las estaba aceptando. Mi correo está en la sección contacto del blog. Saludos.

    2. Francisco de la Peña:

      Buenas, Carlos:
      Hace ya mucho tiempo que se normalizó esta situación, sin embargo creo que ya sé a qué se refería con lo de la policy al usar certificados del BCCR:
      Es posible que estuviera usando el firmador de CRLibre en PHP, o al menos métodos de OpenSSL en un script PHP. Debido a una pulga en una de las funciones de php-ssl, no funcionaba con identificadores de llave muy largos.
      Vea https://github.com/CRLibre/API_Hacienda/issues/156 para más información y parche para solucionarlo en esos casos.

    1. Francisco de la Peña:

      Hola, Ariel:
      No, SignumOne, si se usaba la versión con certificado p12 generado por hacienda (sinumone-ks), la alternativa es seguir esta guía, que generará un certificado custodiado dentro del ATV y seguir usando el facturador gratuito del ATV sin necesidad de utilizar SignumOne. Sobre cómo hacerlo, hay una guía en PDF en esta url https://www.hacienda.go.cr/InformacionTributaria.html en particular, “Guía para revocar y generar llave criptográfica”, y marcando la casilla “Soy usuario del facturador gratuito de Hacienda” para que no se requiera SignumOne.
      Si prefiere usar certificados del BCCR-SINPE (por si quiere firmas digitales con fuerza probatoria certificada), puede descargar la versión 3.1.4 desde https://signumone-dist.s3.amazonaws.com/3.1.4/SignumOne-KS-3.1.4-x86_64.msi y desde https://signumone-dist.s3.amazonaws.com/3.1.4/SignumOne-3.1.4-x86_64.msi donde si usara linux o macos puede usarlos con Java 8 gracias a msiextract: https://fran.cr/como-usar-firma-digital-con-la-herramienta-gratuita-de-emision-de-comprobantes-de-hacienda-en-gnu-linux/
      Saludos.

Responder a Francisco de la Peña

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *