Firmador digital de documentos para Costa Rica

Firmador es un pequeño programa de escritorio para firmar documentos que cumplan la Política de Formatos Oficiales de los Documentos Electrónicos Firmados Digitalmente publicada por el MICITT.

Esta herramienta se ha diseñado para ser simple, fácil de usar y que funcione en múltiples sistemas operativos. La descarga es relativamente ligera y requiere tener instalado Java 8 y los controladores de Soporte Firma Digital.

Por ahora firma documentos PDF. En próximas versiones el programa soportará otros formatos de documento electrónico oficial y otras mejoras.

El programa es software libre y abierto a la colaboración de cualquier persona interesada para mejorar su código o utilizarlo para cualquier propósito.

Firmador tiene su propio sitio web: https://firmador.libre.cr

41 comentarios en “Firmador digital de documentos para Costa Rica

  1. Geovanny:

    Alguien tiene el manual para implementar /usar el firmador desde sistemas web?

    1. Francisco de la Peña:

      Hola Geovanny, el principal obstáculo para firmar desde web es que debe haber una comunicación entre el programa de firma y el sitio web. No todos los navegadores permiten acceso a dispositivos USB y en el caso de las tarjetas de Firma Digital de Costa Rica no se puede operar con ellas por USB en crudo y necesitan un middleware propietario, por lo que la forma para poder firmar un documento en remoto se complica.

      La forma más rudimentaria sería generar un bloque tipo CMS (PKCS#7) para firmar localmente en lugar de descargar el fichero y volverlo a subir entero. Si no hay ningún tipo de comunicación, podría generarse en pantalla un bloque base64 de ese bloque CMS para copia-pega en una aplicación, donde se firmaría y se subiría de vuelta. Algo parecido a lo que se hace con el firmador de factura electrónica de Hacienda.

      Si por el contrario se desea que verdaderamente exista esta comunicación, tengo un artículo de blog donde se explica resumidamente cómo lograrlo ( https://fran.cr/soluciones-modernas-para-usar-firma-digital-desde-la-web/ ) aunque requiere instalar software en las máquinas que generen un certificado autofirmado para la comunicación por TLS con el sitio web y esto es bastante más complicado. Mi objetivo es llegar a este punto, aunque ahora mismo estoy enfocado en agregar firma visible al firmador de forma accesible (texto en lugar de imagen), algo que ya tengo funcional y he comenzado la semana pasada a implementarlo.

  2. Cornelio Urbina:

    Quisiera saber si con este formador se pueden firmar documentos en word, PDF y Excel. En caso afirmativo cómo se hace. Asumiendo que se cuenta con el software BCCR y el firmador instalado. Gracias por su respuesta

    1. Francisco de la Peña:

      Hola, por el momento permite firmar PDF. Para firmar Word y Excel se puede realizar desde esos mismos programas (Word y Excel, versión escritorio). También es posible exportar los documentos de Word y Excel a PDF y firmar el PDF con la herramienta Firmador. Existe soporte parcial para firma XML (XAdES) y de OpenDocument (LibreOffice) pero todavía necesita mejoras. Saludos.

  3. Norman A:

    Buenas tardes, gracias por su aporte, nada más que me aparece error cuando intento firmar con el “firmador.libre.cr”, quisera saber ¿si existe alguna solución o si bien existen otros programas para firmar pdf de software libre?

    1. Francisco de la Peña:

      Buenas tardes Norman, ¿qué tipo de error le aparece? Quizás pueda solucionarse.

      La aplicación de firmador.libre.cr se creó por la falta de alternativas, el propósito es poderla mejorarla y mantenerla a lo largo del tiempo.

  4. Gerardo:

    No soy de CostaRica, uso drivers athena tambien, pero mi proveedor me dice que no tiene los drivers de linux (deb, rmp, x64 y x86) ni de mac (tengo solo los de windows), podrias compartirmelos?

    1. Francisco de la Peña:

      Buenas, en la web soportefirmadigital.com se pueden descargar ingresando el número de serie que viene en las tarjetas de Athena. Suele ser el que aparece en el identificador del token. Suele venir en el reverso de las tarjetas, o identificado en Windows como idprotect#xxxxxxxxxxxxxxx donde las x es el número de serie a utilizar. Si no funcionara para descargar desde ahí, me avisas.

  5. Robert Svensson:

    Estimado Francisco. Solamente querría agradecerle y decir MUCHAS GRACIAS por esta herramienta muy útil que realmente funciona y cumple con lo que promete, y además gratuita! Un comentario: Como la firma se ubica en exactamente el mismo lugar en cada página (en el caso de archivos PDF multipáginas) tenía que usar otra herramienta gratuita (http://www.sodapdf.com/) para separar las páginas a archivos conteniendo una sola página en cada archivo, para luego poder colocar la firma en el lugar exacto en cada página.

    1. Francisco de la Peña:

      Hola Robert, muchas gracias y qué alegría que resulte de utilidad la aplicación.
      En cuanto a lo que mencionas, el firmador permite mover de posición la firma visible: el rectángulo que aparece se puede arrastrar con el mouse.
      Si se van a agregar múltiples firmas se puede mover para reubicarlo y por tanto sin necesidad de modificar el documento. A no ser que no haya entendido bien a lo que te referías.
      Saludos.

  6. Luis:

    Hola, buenas tardes. Estoy usando ahora el iOs Big Sur en mac y el firmador libre sirve unas veces y otras no. (no se abre la ventana de guardar documento) (en otras aplicaciones de firma digital con otros firmadores, si funciona.
    Encontré que re-iniciando la computadora, y realizando la firma con el firmador libre (como la primera acción luego de reiniciar) si logra abrir la ventana de guardar documento.
    Alguna solución?
    Muchas gracias.

    1. Francisco de la Peña:

      Buenas tardes Luis:
      Si se trata de una intermitencia (a veces funciona y a veces no), es posible que haya problemas de conectividad de red o de DNS, ya que el firmador se conecta a los servidores de Firma Digital para consultar la información de estado de revocación de certificados (CRL, OCSP) y solicitar un sello de tiempo al servicio TSA del SINPE. En caso de problemas de conectividad el firmador podría tras un rato mostrar un mensaje de error.
      También podría ser causa de algún bloqueo de red debido a algún filtro de red en caso de que esté en una red corporativa.
      Hoy mismo me informaron que estaban reportando algunos problemas con el proveedor de internet Tigo, aunque quizás se deba solamente a una inestabilidad en los servidores DNS. Si fuera problema de DNS es posible configurarlos por otros alternativos.
      También podría ser algún otro problema dentro de macOS no identificado, aunque en pruebas locales con Big Sur no he tenido problemas para firmar múltiples veces. Desconozco si en su caso intentando desconectar la tarjeta del lector y volviéndola a conectar permite evitar el reinicio.
      Saludos.

  7. Carlos Zamora:

    Hola, existe algún url espejo para bajar el instalador?
    Me parece que no encuentra el sitio.

    1. Francisco de la Peña:

      Hola Carlos, ¿tiene por casualidad instalado algún sistema Antivirus de marca ESET? Este antivirus tiene un filtro que es incompatible con subdominios de algunos sitios web y hace que muchos sitios web no carguen por error de certificado. Si fuera el caso, es posible agregar una excepción o desactivarlo temporalmente para cargar el sitio web. No es un falso positivo sino un problema de este antivirus (este antivirus utiliza una técnica man in the middle para escanear tráfico TLS) y el sitio web utiliza técnicas modernas de seguridad incompatibles con este mecanismo del antivirus.
      Si no fuera el caso de usar este antivirus, agradecería que me indicara el mensaje de error que aparece. Muchas gracias.

    2. Francisco de la Peña:

      Buenas nuevamente Carlos, también es posible que si se hubiera seguido la guía de soportefirmadigital.com para la instalación del firmador libre, que el video contiene la dirección https://www.firmador.libre.cr cuando debería ser https://firmador.libre.cr (sin el www) para que cargue correctamente. Agregaré en el futuro un subdominio de cuarto nivel solo para mitigar el problema existente en la documentación de Soporte Firma Digital.
      Saludos.

    3. Francisco de la Peña:

      Buenas noches Carlos:
      Disculpas por las molestias, efectivamente ayer no estaba funcionando el sitio web, el cache de DNS me impidió encontrar el problema y no estaba afectando a otros dominios. Ya se ha corregido la situación y debería poder acceder de nuevo.

  8. Adonay Solís:

    Hola, buenas noches. Desde el día jueves, no logro ingresar al sitio web https://firmador.libre.cr, me genera un error de “Servidor no encontrado”. ¿Existe algún problema con el sitio web?

    1. Francisco de la Peña:

      Buenas noches Adonay, muchísimas gracias por el aviso. Acabo de revisar y efectivamente hay una confusión en la configuración de DNS (técnicamente, uno de los nameservers tiene problemas con la firma NSEC y provocando una respuesta SERVFAIL, debido al conflicto con otros nameservers definidos para otro servidor). Estoy tratando de mitigar la situación. Tan pronto como lo tenga listo le aviso por aquí.

  9. Adonay Solís:

    Hola, buenas trades. ¿Quisera saber si el programa actualmente permite firmar en otros formatos de documento electrónico oficial distinto del PDF? Gracias

    1. Francisco de la Peña:

      Buenas tardes Adonay, el firmador permite firmar documentos en formato OpenDocument (.odt, .ods, .odp, .odg) de LibreOffice. También puede firmar de forma genérica ficheros con la firma por separado (XAdES o CAdES detached). Por el momento no firma documentos de Microsoft Office.
      Hay planes de agregar soporte de firma de facturas electrónicas en el futuro, e investigar opciones para firmar documentos de Microsoft Office pero no hay una fecha para su desarrollo.

        1. Francisco de la Peña:

          Con gusto. El firmador tiene otras características avanzadas no mostradas en la interfaz, entre las que destacan firma de documentos desde sitio web, imagen personalizada en la firma visible, opción para lanzarlo para firma automática sin interfaz gráfica para servidores, firma con sello electrónico (persona jurídica), entre otras.
          Existe una breve documentación sobre estas características en el documento “preguntas-frecuentes.md” en el repositorio de código fuente.

  10. Paula Solano Gamboa:

    Buenos días
    Tengo problemas con el firmador de java, este es el mensaje
    Aviso: no se ha podido agregar el sello de tiempo y la información de revocación porque es posible que haya problemas de conexión a Internet o con los servidores del sistema de Firma Digital. Detalle del error: eu.europa.esig.dss.alert.exception.AlertException: Broken timestamp(s) detected. [T-459531429E78DC8A128E3A09FFFA077FAB6BAB1F0FB6E51095B784F0F97AC7E9, T-9BD320352835745457FB3E40D478FE314EE0094D8E26452E9CD1F6B760047157] Se ha agregado una firma básica solamente. No obstante, si el sello de tiempo resultara importante para este documento, debería agregarse lo antes posible antes de enviarlo al destinatario. Si lo prefiere, puede cancelar el guardado del documento firmado e intentar firmarlo más tarde.

    Que puedo hacer

    1. Francisco de la Peña:

      Buenos días, Paula:
      Parece que hay problemas con el resultado de validación de sellos de tiempo.
      ¿El documento contiene firmas digitales previas?
      ¿El error persiste si se reintenta el proceso de firma?

      1. Sergio Morales Hernández:

        Hola Francisco. A mí me sale un error similar al indicado (me sale esto: Detalle del error: java.net.SocketTimeoutException: connect timed out). Y en mi caso me aparece el error en documentos que ya tienen firmas digitales. Muchas gracias.

        1. Francisco de la Peña:

          Hola Sergio. El mensaje en su caso es problema de conexión, quizás temporal, para conectar con los servidores de Firma Digital. La firma digital avanzada contiene varios niveles, la firma básica se puede hacer sin conexión a Internet (nivel B), los niveles superiores (T, LT y LTA) contienen atributos adicionales requieren conexión con servidores para obtener sellos de tiempo en la autoridad de sellado de tiempo (TSA) e información de revocación (CRL y OCSP) que se consulta a la jerarquía del la autoridad certificadora del certificado del firmante para averiguar si el certificado es válido en el momento de firmar.
          El firmador permite la posibilidad de firmar si no hay conexión, utilizando el nivel de firma B, para casos de contingencia (caída de la red local o de servidores). Normalmente cuando hay un problema de este tipo es temporal. Si el error persiste con el connection timed out entonces quizás hay algún tipo de restricción de bloqueo de red, por ejemplo si está tratando de firmar desde una computadora conectada a una red institucional y haya bloqueos por cortafuegos o problema con routers, puntos de acceso, etc. que a veces reiniciando se resuelve. También podría ser algún problema temporal y puede cancelar el guardado para firmar más tarde, de lo contrario el validador puede indicar que falta información en el documento firmado.
          Se supone que la información faltante cuando se firma con el nivel básico (B) se puede agregar posteriormente pero el validador de firmas digitales del BCCR no la reconoce bien incluso tras haberla agregado (está reportado este problema), por lo que se recomienda cancelar y volver a intentar firmar por si el problema de conexión era temporal o para cuando la red esté disponible de nuevo para firmar.
          Saludos,

  11. Arq. Gustavo Calderon Gutierrez:

    Saludos. Tengo un problema al tratar de firmar pues al abrir un plano en PDF la imagen sale enorme y no me permite desplazarme para firmar en el espacio que se requiere. Alguien como sabe cómo mejorar esa visualización reduciendo la imagen para poder verla completa y firmar donde corresponde ?Soy usuario de MAC

    1. Francisco de la Peña:

      Saludos, Gustavo:
      Este es un problema conocido donde la vista previa hace demasiado grande el tamaño de la ventana y sistemas operativos como macOS no permiten desplazar la ventana más arriba del borde superior. Se está preparando una actualización que corrige este problema y se intentará tener una versión preliminar este mismo mes de agosto.
      Mientras tanto podría intentar convencer que la firma digital no necesita representación gráfica (puede marcar “Sin firma visible”), ya que la firma digital es un algoritmo matemático en el documento electrónico. La equivalencia legal con la versión manuscrita no requiere de una representación gráfica. Además, la representación gráfica de una firma digital es solo una guía para orientar a los usuarios de que el documento puede contener firmas digitales, pero esa representación gráfica no tiene validez por sí misma. Le puede mandar a las personas interesadas la lectura de la siguiente cláusula 5.2.2 en la página 10 del siguiente documento de política de los formatos oficiales:
      https://www.mifirmadigital.go.cr/wp-content/uploads/2019/02/DCFD-Politica-de-Formato-Oficial-v2.0.pdf
      “La representación gráfica de una firma digital certificada, una impresión o captura de imagen de un documento electrónico firmado digitalmente, por sí solo, no cuenta con validez.”
      Saludos.

  12. Cynthia:

    Hola, me da un error al abrir, UNABLE TO ACCESS JARFILE, agradezco si me puedes ayudar

  13. Ingrid Láscarez:

    Buenos días
    Tengo problemas con el firmador de java, este es el mensaje
    Aviso: no se ha podido agregar el sello de tiempo y la información de revocación porque es posible que haya problemas de conexión a Internet o con los servidores del sistema de Firma Digital. Detalle del error: eu.europa.esig.dss.alert.exception.AlertException: Broken timestamp(s) detected. [T-459531429E78DC8A128E3A09FFFA077FAB6BAB1F0FB6E51095B784F0F97AC7E9, T-9BD320352835745457FB3E40D478FE314EE0094D8E26452E9CD1F6B760047157] Se ha agregado una firma básica solamente. No obstante, si el sello de tiempo resultara importante para este documento, debería agregarse lo antes posible antes de enviarlo al destinatario. Si lo prefiere, puede cancelar el guardado del documento firmado e intentar firmarlo más tarde. Que puedo hacer

  14. Geovanni Robles:

    Buenas noches, me gustaría saber si el firmador tiene algún límite en cuanto al tamaño del PDF que se necesita firmar, con archivos pequeños no he tenido problemas, sin embargo con otros que pasan 1GB de tamaño se toma demasiado tiempo y al final no me está mostrando el documento, por desgracia me fue necesario subir el sistema operativo a MacOS Monterey y el adobe reader DC dejó de permitirme firmar los PDF, antes del upgrade podía hacerlo sin problemas con el adobe en archivos así de grandes, gracias de antemano.

    1. Francisco de la Peña:

      Buenas noches Geovanni, nos hemos encontrado casos en los que la memoria heap de Java supera el límite de memoria (max heap memory) predeterminado de la máquina virtual de Java, sobre todo cuando el Java es de 32 bit donde el límite es muy bajo y en algunos casos no puede ampliarse y debe usarse una de 64 bit, aunque es probable que en el caso de Mac se esté usando una de 64. Cuando el problema de memoria sucede y no carga, se puede parametrizar para ampliar, en caso de ser necesario, el tamaño de memoria heap máximo. Configurar este parámetro en Mac puede ser complicado, la forma más sencilla es probar a ejecutarlo por línea de comandos desde la terminal:
      java -Xmx4g -jar firmador.jar
      Esto ampliaría el tamaño de heap máximo a 4 GB, puede ajustar este tamaño según requiera y según la RAM que tenga su computadora.
      En versiones futuras del firmador se quiere utilizar una alternativa a la dependencia de máquina virtual que es mucho más eficiente en cuanto a velocidad y a consumo de memoria, pero por ahora el generador de vista previa de páginas es muy costoso y las comprobaciones que genera el validador revisan visualmente página por página para detectar diferencias visuales, causando en documentos grandes una demora enorme. Se pretende agregar una opción futura al firmador para desactivar este sistema de detección de diferencias, que está diseñado para proteger a los usuarios de cierto tipo de ataques a las firmas de los PDF (Shadow Attacks).
      En su caso, podría habilitar en la pestaña de configuración una opción de habilitar bitácoras, donde aparecerá una pestaña adicional y ahí comprobar si pasados los minutos que no cargue el documento, verificar si apareció algún tipo de error relacionado con out of memory, que actualmente no se está capturando, que nos serviría para mejorar esta parte. También puede intentar contactar mediante el correo que hay en el sitio web del firmador que llega copia a mi buzón para enviar ese detalle si lo desea y ver qué soluciones a corto plazo se pueden realizar. Saludos.

  15. Roberto Gonzalez:

    MACOS SONOMA (14.0) APPLE SILICON – el firmador v 1.9.3 dejo de funcionar, no encuentra los certificados, por ende no puede firmar documentos. pero GAUDI si funciona sin problema, osea que los certificados estan instalados bien. ALguno tendra este problema que pueda arientar hacia una solucion ? slds !

    1. Francisco de la Peña:

      Hola Roberto, probablemente tiene una mac modelo 2020 en adelante con chip Apple (M1, M2, etc.). Lo que suele suceder es que tenga instalada una versión de Java para ARM en lugar de para Intel. Si tiene JDK instalado, Abra el Finder, menú “Ir”, elija “Ir a la carpeta…” y en la ventana ingrese la siguiente dirección:
      /Library/Java/JavaVirtualMachines
      Y presione la tecla Enter. Si la carpeta aparece vacía, no tiene ningún JDK instalado. Si tiene JDK instalados, elimine el/los que sean para ARM.
      Si no tiene JDK instalados, entonces descargue Java desde java.com, la versión para Intel. Al lanzar el pkg desde el dmg, el software tal vez pida activar Rosetta si hasta ahora no ejecutó ninguna aplicación emulada Intel.
      Cuando abra el instalador aparece un botón para desinstalar Java, hágalo para que le desinstale la versión ara ARM. Luego vuelva a lanzar el instalador e instale normalmente, esto le instalará Java para Intel. Cuando termine podrá lanzar el firmador y le deberá detectar la tarjeta.
      Saludos.

    1. Francisco de la Peña:

      Qué dicha, con gusto!
      La razón por la cual es necesaria la versión Java para Intel es debido a que la aplicación Firmador, basada en Java, requiere cargar una librería que proporciona el fabricante de tarjetas. Esta librería es de código cerrado y solo está disponible compilada para arquitectura Intel. Si se carga una librería dinámicamente desde una aplicación de otra arquitectura diferente a la de la librería, aquí el emulador Rosetta no realiza la traducción automática, por lo que el firmador no puede leer los certificados para seleccionarlos. En próximas actualizaciones del firmador se detectarán estos casos para poder mostrar indicaciones desde un mensaje en la aplicación cuando esto suceda.
      Saludos!

Responder a Robert Svensson

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