Cómo instalar Firma Digital de Costa Rica en Manjaro (Arch Linux)

Esta guía documenta cómo instalar el controlador de la tarjeta de Firma Digital de Costa Rica y la jerarquía de certificados del Banco Central (SINPE) y del MICITT en el sistema operativo Manjaro, basado en Arch Linux. Es posible que pueda instalarse en Arch Linux pero que requiera instalar paquetes adicionales no mencionados. Esta instalación ha sido probada en Manjaro GNOME (Minimal), por lo que algunos comandos pueden variar como el uso del editor gedit si se utilizara otro entorno de escritorio diferente.

Las instrucciones están diseñadas para las distribuciones mencionadas previamente. Si se desea utilizar en otras distribuciones, existe las guías sobre cómo instalar Firma Digital de Costa Rica en Fedora, Red Hat Enterprise Linux 8 y CentOS 8, cómo instalar Firma Digital de Costa Rica en openSUSE y SUSE Linux Enterprise y cómo instalar Firma Digital de Costa Rica en Debian y Ubuntu.

Esta guía de instalación tiene los siguientes propósitos:

  • Configurar de la forma más sencilla y adecuada el sistema para que funcione con la mayor cantidad de programas.
  • Lograr que funcione para todos los usuarios del sistema, incluyendo los nuevos usuarios creados tras las instalación.
  • Aislar la librería de Firma Digital en una “caja de arena” (sandbox) para que funcione con múltiples usuarios del sistema simultáneamente (soluciona un defecto en la librería al crear ficheros temporales).

Instalación de las dependencias

  • Instalar el soporte CCID de PC/SC para que reconozca el lector de tarjetas e IcedTea-Web para poder cargar algunos lanzadores que usan Java Web Start como por ejemplo el del sitio web de CrearEmpresa.go.cr o el Módulo Firma Digital de la CCSS.
    sudo pacman -S --noconfirm --needed firefox firefox-i18n-es-ar unzip cpio rpm-tools pcsclite ccid jre8-openjdk icedtea-web

Descarga del “instalador”

  • Descargar el “instalador” en el desplegable llamado “Usuarios Linux” en la página de descarga de instaladores del sitio web de Soporte Firma Digital de Costa Rica, introduciendo el número de serie de la tarjeta y aceptando las condiciones.
  • Descomprimir el archivo zip descargado con unzip, en el momento de escribir esta documentación se llama sfd_ClientesLinux_RPM64_Rev25.zip. Se creará una carpeta llamada Firma Digital. Se asume que el archivo zip se ha descargado en la carpeta Descargas:
    cd $HOME/Descargas/
    
    unzip sfd_ClientesLinux_RPM64_Rev25.zip
    

Instalación de los certificados

Es necesario agregar a la lista de confianza la jerarquía de certificados del SINPE y del MICITT. En teoría solamente sería necesario instalar los certificados raíz del MICITT pero en la práctica hay algunas aplicaciones que necesitan los certificados intermedios del SINPE para completar la cadena a la hora de validar. Para ello, un conjunto de comandos:

  • Copiar los certificados:
    sudo cp -p $HOME/Descargas/sfd_ClientesLinux_RPM64_Rev25/Firma\ Digital/Certificados/* /usr/share/ca-certificates/trust-source/anchors/
    
  • Regenerar los archivos de certificados para todas las aplicaciones:
    sudo update-ca-trust
    

Instalación del módulo PKCS#11

Aunque hay un módulo en el directorio Librerías, no es la versión más reciente y tiene varios defectos de enlazado. La versión distribuida en el paquete PinTool es más reciente y funciona correctamente en todos los programas probados. En el siguiente proceso se extrae y se instala conservando la fecha original de la librería.

  • Instalar el módulo PKCS#11 privativo en /usr/lib/:
    cd $HOME/Descargas/sfd_ClientesLinux_RPM64_Rev25/Firma\ Digital/PinTool/IDProtect\ PINTool\ 7.24.02/RPM/
    
    rpm2cpio idprotectclient-7.24.02-0.x86_64.rpm | cpio -dim ./usr/lib/x64-athena/libASEP11.so
    
    sudo cp -p usr/lib/x64-athena/libASEP11.so /usr/lib/
    
    sudo mkdir -p /usr/lib/x64-athena/
    
    sudo mkdir -p /Firma_Digital/LIBRERIAS/
    
    sudo ln -s /usr/lib/libASEP11.so /usr/lib/x64-athena/
    
    sudo ln -s /usr/lib/libASEP11.so /usr/local/lib/
    
    sudo ln -s /usr/lib/libASEP11.so /Firma_Digital/LIBRERIAS/
    
    sudo ln -s /usr/share/ca-certificates/trust-source/anchors /Firma_Digital/CERTIFICADOS
    
    sudo ln -s /usr/lib/p11-kit-proxy.so /usr/lib/firefox/libosclientcerts.so
  • Crear el fichero /etc/Athena/IDPClientDB.xml y abrirlo para edición:
    sudo mkdir /etc/Athena/
    
    sudo gedit /etc/Athena/IDPClientDB.xml
    
  • En la ventana del editor de textos gedit, pegar el siguiente texto, guardar y cerrar el editor:
    <?xml version="1.0" encoding="utf-8" ?>
    <IDProtect>
     <TokenLibs>
      <IDProtect>
       <Cards>
        <IDProtectXF>
         <ATR type='hexBinary'>3BDC00FF8091FE1FC38073C821106600000000000000</ATR>
         <ATRMask type='hexBinary'>FFFF00FFF0FFFFFFFFFFFFFFFFF0FF00000000000000</ATRMask>
        </IDProtectXF>
       </Cards>
      </IDProtect>
      <ChipDoc>
       <Cards>
        <ChipDocEMV>
         <ATR type='hexBinary'>3BEA00008131FE450031C173C840000090007A</ATR>
         <ATRMask type='hexBinary'>FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</ATRMask>
        </ChipDocEMV>
       </Cards>
      </ChipDoc>
     </TokenLibs>
    </IDProtect>
    
  • Crear un fichero llamado /usr/share/p11-kit/modules/firma-digital.module y abrirlo para edición:
    sudo gedit /usr/share/p11-kit/modules/firma-digital.module
    
  • En la ventana del editor de textos gedit, pegar el siguiente texto, guardar y cerrar el editor:
    remote: |bwrap --unshare-all --dir /tmp --proc /proc --dev /dev --ro-bind /etc/Athena /etc/Athena --ro-bind /usr /usr --ro-bind /lib64 /lib64 --ro-bind /run/pcscd /run/pcscd p11-kit remote /usr/lib/libASEP11.so
    
  • Habilitar y cargar el servicio pcscd bajo demanda:
    sudo systemctl enable --now pcscd.socket
    

Eso es todo. Es necesario reiniciar Firefox y cualquier otra aplicación que use certificados para que se apliquen los cambios.

Quizás resulte interesante utilizar la herramienta Firmador, software libre para firmar documentos.

21 comentarios en “Cómo instalar Firma Digital de Costa Rica en Manjaro (Arch Linux)

  1. Juan Carlos:

    Me alegra mucho Fran que sigue trabajando duro para que podamos instalar estas herramientas de trabajo (para algunos muy cotidianas) en diferentes distribuciones, ahorita estaba por trabajar con una disto que se llama KaOS inspirada en Arch aunque despues cambio el gestor de paquetes y ahora ellos tienen sus propios repositorios. Ya que quiero probar algunos sabores con KDE Plasma hay un grupo de facebook que todos los días son de escritorio https://www.facebook.com/groups/3401196263237743 algunos hacen personalizaciones muy bonitas.

    1. Francisco de la Peña:

      Gracias Juan Carlos, qué dicha que resulten de utilidad. Sería interesante saber si funciona en KaOS para comprobar si la guía es lo suficientemente genérica para Arch en general o si es necesario sugerir la instalación de algún paquete adicional.

  2. Carlos Daniel Quattrocchi:

    Hola Francisco, me gustaría contactar contigo, somos colegas en este tema. Soy de Argentina, vivo en Buenos Aires y me dedico al desarrollo de aplicaciones para Firma Digital. Te dejo mí correo y te mando un saludo cordial

  3. Jeremy Molina:

    Gracias por las instrucciones he creado mi propia nota con todo resumido jeje, muchas gracias.

    Una cosilla que yo hice distinto fue instalar java-openjfx primero y al final instalar openJDK via “Add/Remove”.

    $ sudo pacman -S java-openjfx
    $ sudo pacman -S cpio rpm-tools pcsclite ccid icedtea-web

    openJDK que instale: https://www.archlinux.org/packages/extra/x86_64/jdk11-openjdk/

    Esto es por preferencia, para saber que estoy instalando un paquete valido y no tener que buscar cual versión es cual…

    1. Francisco de la Peña:

      Gracias Jeremy. Es una de las ventajas de las distribuciones poder elegir paquetería y la manera de instalarla por diferentes comandos o interfaces.
      Aprovecho para mencionar que existen varias versiones de Java estables y se suelen poder instalar todas en paralelo y se puede seleccionar cuál será la que funcionará por defecto. Esto es importante porque algunas aplicaciones como por ejemplo el componente de firma del SICOP no funcionan con Java 11. En algunas distros como debian/ubuntu y fedora/redhat/centos tienen un comando llamado update-alternatives y alternatives respectivamente, mientras que Arch Linux tiene el comando archlinux-java para elegir la máquina virtual por defecto. Está documentado en el wiki de la distribución.
      Saludos.

  4. Diego Garro:

    Hola Francisco, estoy tratando de instalar dicho software en Manjaro KDE Plasma, supongo que al instalar rpm-tools se debe elegir este tipo de paquetería para la instalación del Firmador_BCCR. Sé que en derivadas de Arch no se puede instalar paquetes .rpm. Mi consulta va dirigida en despés de terminar estas instrucciones, qué sigue? Espero te encuentres bien y muchas gracias por tan valiosa información.

    Saludos.

    PD: Ya instalé todo esto en una laptop que tengo para pruebas con Linux Mint siguiendo las instrucciones del sitio oficial de la firma digital, pero mi máquina habitual la tengo con Manjaro y me gustaría instalarlo acá. Di con tu blog y lo seguí pero me estanqué a la hora de la instalación del Firmador_BCCR.

  5. Russell Martin:

    Hola Fran, muchas gracias para estos instrucciones. Desde el 2019 estoy usando Manjaro y me gusta mucho – cambié de Ubuntu para evitar SNAPs y tener el software mas actualizado. Intenté instalar en Debian 10, pero es una virtualbox y no me sirvió – entonces seguí estes instrucciones para instalarlo en Manjaro en el anfitrión conjunto con el guia de Jeremy para instalar el Firmador. ¡Exito! De nuevo, muchisimas gracias y voy a probar el firmador que recomiende.

  6. Jaime:

    Hola, como hago para instalar el signumone en manjaro?

    1. Francisco de la Peña:

      Hola Jaime,
      personalmente no he usado el SignumOne KS (certificado de Hacienda) sino que el SignumOne “normal” con Firma Digital, que es el recomendable para firmar facturas electrónica con fuerza probatoria.
      Hace más de un año que no publican la versión para Linux sin Firma Digital, lamentablemente (llegué a utilizarla antes de que la eliminaran de la descarga). La versión KS no la recomiendo porque la firma de un certificado emitido por Hacienda no tiene la misma fuerza probatoria en caso de reclamación que un certificado emitido por el BCCR (con CA raíz MICITT).
      En cualquier caso, recomiendo probar esto:
      1: Instala Java 8 y OpenJFX.
      1: Descarga SignumOne para Windows desde https://www.hacienda.go.cr/contenido/14839-herramienta-gratuita-de-emision-de-comprobantes (si usas el sin KS para firma digital, mucho mejor)
      2: Instala msitools (yo lo tengo en Fedora, en Arch creo que está en AUR solamente)
      3: Desde la terminal, en la carpeta de descargas, ejecuta msiextract nombredelfichero.msi
      4: Se habrá extraido en la carpeta PFiles/SignumOne/app por lo que desde esa carpeta, ejecuta java -jar signumone-app-jfx.jar (o como se llame el fichero jar)
      5: Edita el fichero /etc/hosts y en la línea 127.0.0.1 agrega al final tras un espacio: app.signum.one (o bien, crea una línea nueva con lo siguiente: 127.0.0.1 app.signum.one)
      6: Abre en el navegador el sitio https://app.signum.one:8123 y agrega una excepción para el sitio
      7: Abre el sitio web de hacienda y firma tu factura.
      Solo he probado a ejecutarlo y se abre pero no tengo que hacer facturas de momento. Si te funciona me avisas y creo una guía.

    2. Randy Hurtado:

      Saludos, Jaime, para instalar el firmador SignumOne para utilizar la Llave Criptográfica, el siguiente procedimiento puede serte de utilidad:
      1) Ingresar a la página de Hacienda https://www.hacienda.go.cr/contenido/14839-herramienta-gratuita-de-emision-de-comprobantes
      Descargar la opción de Firmador para Llave criptográfica .rpm (Fedora, Centos, Red Hat, otros).
      2) Suponiendo que el archivo descargado .rpm se guarde en la carpeta de Descargas, seleccionas el archivo con click derecho y te vas a la opción “Abrir con Gestor de Archivadores Engrampa” te vas a carpeta llamada SignumOne-KS y la arrastras para que se extraiga en Descargas.
      3) Te vas a la Terminal, se instala una dependencia
      sudo pacman -S gtk-engine-murrine
      4) Mueves los binarios con el siguientes comandos
      sudo mkdir /opt/SignumOne-KS
      sudo cp -p -r $HOME/Descargas/SignumOne-KS/ /opt/
      5) Se copia el archivo Desktop para que pueda ser leído por el Lanzador de Aplicaciones con los siguientes comandos
      cd /opt/SignumOne-KS/
      sudo cp -p SignumOne-KS.desktop /usr/share/applications/

      Con lo anterior puedes utilizar SignumOne en Manjaro!! Buena Suerte!!!

      1. Francisco de la Peña:

        Gracias Randy, la versión rpm del KS va por la 3.1.2 mientras que ya van por la 3.1.4 en el msi, por lo que sugeriría extraer el JAR del .msi para instalarlo en la misma ubicación donde lo haya instalado por el rpm. ¡Saludos!

  7. Randy Hurtado:

    Muchas gracias por el tutorial fue de gran ayuda. Agrego un aporte, en mi caso tengo escritorio XFCE en Manjaro entonces en lugar de utilizar en editor de textos “gedit” utilice “mousepad” que es el que viene por defecto en Manjaro.
    Por ejemplo: En lugar de utilizar el código
    sudo gedit /etc/Athena/IDPClientDB.xml
    utilice el siguiente código
    sudo mousepad /etc/Athena/IDPClientDB.xml
    La instalación fue éxitosa así como el tutorial que viene en los comentarios para instalar el Firmador del BCCR fue instalado con éxito. Gracias totales a todos.

    1. Francisco de la Peña:

      Muchas gracias Aris. Si no ha habido cambios desde que se creó la guía, en Firefox debería funcionar sin tener que instalar a mano el fichero libASEP11.so, de hecho el propósito de esta guía es que funcione para todos los usuarios directamente, sin tener que realizar ese paso para cada usuario de la computadora. Saludos.

      1. Aris Barbieri:

        Gracias por la respuesta, esa parte la puse porque al menos a mí no me funcionó sin ese paso por alguna razón. Voy a actualizar eso en el readme.

      2. Aris Barbieri:

        O para ser más preciso, en algunas páginas no me funcionaba, como por ejemplo la del banco popular. Solo me funcionó cuando cargué el libASEP11.so manualmente.

        1. Francisco de la Peña:

          Gracias por el dato, entonces probaré la guía para ver qué cambió que pueda causar ese comportamiento y actualizarla, porque la autenticación en sitios como el Banco Popular y el Banco Nacional debería funcionar directamente en Firefox.

        2. Francisco de la Peña:

          Hola de nuevo, por fin probé y al menos existen dos problemas. El primero se debe a https://superuser.com/a/1577270 y por tanto había que agregar al fichero firma-digital.module un –ro-bind /lib64 /lib64 para que funcionara. Aparecía un execvp no such file or directory al depurar mediante el comando p11-kit list-modules –verbose. He actualizado la guía para incluirlo. El otro parece que no está usando p11-kit-proxy, tal vez cambiaron algo hace un año según veo en algunos hilos, por lo que agregaré un script parecido al que se utiliza en la guía de openSUSE para reemplazar el enlace simbólico de p11-kit-trust a p11-kit-proxy. Luego escribo cómo fue con esto.

        3. Francisco de la Peña:

          Buenas de nuevo, agregué un paso para crear un enlace simbólico de p11-kit-proxy.so en la ruta /usr/lib/firefox/libosclientcerts.so que permitirá usar la autenticación de los bancos sin necesidad de configuración manual pero si piensa firmarse desde programas como Evolution o Thunderbird con S/MIME, o firma de ODF en LibreOffice hay que utilizar un enlace simbólico reemplazando el enlace de /usr/lib/libnssckbi.so para que apunte a p11-kit-proxy.so en lugar de p11-kit-trust.so. Sin embargo el enlace simbólico de libnssckbi.so es posible que se actualice con Firefox, por lo que habría que crear un script que lo restaurara, disparado mediante systemd path activation, donde el script compruebe mediante el comando readlink si el destino cambió. Saludos.

Deja un comentario

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