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 los sistemas operativos openSUSE y SUSE Linux Enterprise.
Las instrucciones están diseñadas para las distribuciones mencionadas previamente. Si se desea utilizar en otras distribuciones, existen 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 Debian y Ubuntu y cómo instalar Firma Digital de Costa Rica en Manjaro (Arch Linux).
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 protocolo usado por el lector de tarjetas Instalar 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 zypper install -y pcsc-ccid icedtea-web sudo systemctl restart pcscd.socket
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 de descargas:
cd $(xdg-user-dir DOWNLOAD) 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 $(xdg-user-dir DOWNLOAD)/sfd_ClientesLinux_RPM64_Rev25/Firma\ Digital/Certificados/* /usr/share/pki/trust/anchors/
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/lib64/:
cd $(xdg-user-dir DOWNLOAD)/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/lib64/ sudo mkdir -p /usr/lib/x64-athena/ sudo mkdir -p /Firma_Digital/LIBRERIAS/ sudo ln -s /usr/lib64/libASEP11.so /usr/lib/x64-athena/ sudo ln -s /usr/lib64/libASEP11.so /usr/lib/ sudo ln -s /usr/lib64/libASEP11.so /usr/local/lib/ sudo ln -s /usr/lib64/libASEP11.so /Firma_Digital/LIBRERIAS/ sudo ln -s /usr/share/pki/trust/anchors /Firma_Digital/CERTIFICADOS
- Permitir temporalmente al usuario local cargar aplicaciones gráficas con sudo (kate o gedit, según se use KDE o GNOME):
export SUDO_EDITOR=kate
- Crear el fichero /etc/Athena/IDPClientDB.xml y abrirlo para edición:
sudo mkdir /etc/Athena/ sudoedit /etc/Athena/IDPClientDB.xml
- En la ventana del editor de textos, 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:
sudoedit /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 --ro-bind /etc/Athena /etc/Athena --proc /proc --dev /dev --ro-bind /usr /usr --ro-bind /lib64 /lib64 --ro-bind /var/run/pcscd /var/run/pcscd --ro-bind /run/pcscd /run/pcscd p11-kit remote /usr/lib64/libASEP11.so
- Crear un fichero llamado /usr/sbin/update-p11-kit-nss-proxy y abrirlo para edición:
sudoedit /usr/sbin/update-p11-kit-nss-proxy
- En la ventana del editor de textos, pegar el siguiente texto, guardar y cerrar el editor:
#!/bin/sh if ! [ -L /usr/lib64/libnssckbi.so ] then echo libnssckbi.so is not a symbolic link. Backing up... mv -f /usr/lib64/libnssckbi.so /usr/lib64/libnssckbi.so.bak fi if ! [ "$(readlink /usr/lib64/libnssckbi.so)" = p11-kit-proxy.so ] then echo libnssckbi.so is not pointing to p11-kit-proxy.so. Fixing... ln -sf p11-kit-proxy.so /usr/lib64/libnssckbi.so fi
- Agregar el atributo de ejecutable al script:
sudo chmod +x /usr/sbin/update-p11-kit-nss-proxy
- Crear un fichero llamado /etc/systemd/system/p11-kit-nss-proxy.service y abrirlo para edición:
sudoedit /etc/systemd/system/p11-kit-nss-proxy.service
- En la ventana del editor de textos, pegar el siguiente texto, guardar y cerrar el editor:
[Unit] Description=Update libnssckbi.so symbolic link Wants=local-fs.target [Service] Type=oneshot ExecStart=/usr/sbin/update-p11-kit-nss-proxy [Install] WantedBy=default.target
- Crear un fichero llamado /etc/systemd/system/p11-kit-nss-proxy.path y abrirlo para edición:
sudoedit /etc/systemd/system/p11-kit-nss-proxy.path
- En la ventana del editor de textos, pegar el siguiente texto, guardar y cerrar el editor:
[Unit] Description=Watch for changes in libnssckbi.so After=local-fs.target [Path] Unit=p11-kit-nss-proxy.service PathChanged=/usr/lib64/libnssckbi.so [Install] WantedBy=default.target
- Activar el servicio para que se ejecute al detectar cambios en la ruta:
sudo systemctl enable --now p11-kit-nss-proxy.path sudo touch /usr/lib64/libnssckbi.so
- Activar el servicio al arranque y ejecutarlo una primera vez para comprobar que funciona:
sudo systemctl enable --now p11-kit-proxy-updater.service
- Crear un fichero para desactivar la línea disable-in: p11-kit-proxy del fichero /usr/share/p11-kit/modules/p11-kit-trust.module mediante la sobrescritura de esta línea de configuración a través de un fichero con el mismo nombre en la ruta /etc/pkcs11/modules/:
sudo mkdir -p /etc/pkcs11/modules/ sudo sh -c 'echo "disable-in:" > /etc/pkcs11/modules/p11-kit-trust.module
Es importante este último paso. De lo contrario, en versiones más recientes de la distribución, en Firefox aparecerá un error de certificado no confiado en cualquier sitio que utilice conexión por HTTPS.
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.