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 Ubuntu 18.04 LTS, Ubuntu 18.10 y Debian 9.

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

Instalación de las dependencias

sudo apt -y install pcscd bubblewrap icedtea-netx openjfx binutils sudo

En el caso de Debian, para poder usar los comandos con sudo, ejecutar como root usermod -a -G sudo nombredeusuario reemplazando nombredeusuario por el nombre de usuario que se desee usar con sudo y reiniciar para aplicar cambios. En Ubuntu no es necesario este paso.

Descarga del “instalador”

cd ~/Descargas/

unzip sfd_ClientesLinux_Rev09.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. El último instalador también incluye una CA del BCCR, probablemente para el certificado de código de su propio firmador (que en teoría tampoco debería ser necesario si el sistema operativo está correctamente actualizado). Para ello, un conjunto de comandos:

sudo cp ~/Descargas/Firma\ Digital/Certificados/* /usr/local/share/ca-certificates/

sudo rename.ul -- .cer .crt /usr/local/share/ca-certificates/*.cer

for file in /usr/local/share/ca-certificates/*.crt; do sudo openssl x509 -inform DER -in "$file" -out "$file.tmp"; done 2>/dev/null

sudo find /usr/local/share/ca-certificates/ -type f -empty -delete

sudo rename.ul -- .tmp '' /usr/local/share/ca-certificates/*.tmp
sudo update-ca-certificates --fresh

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.

cd ~/Descargas/Firma\ Digital/PinTool/IDProtect\ PINTool\ 6.41.01/DEB/

ar p idprotectclient_641.01-0_amd64.deb data.tar.gz | tar zx ./usr/lib/x64-athena/libASEP11.so

sudo cp -p usr/lib/x64-athena/libASEP11.so /usr/lib/x86_64-linux-gnu/
sudo ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/

sudo mkdir -p /usr/lib/x64-athena/

sudo ln -s /usr/lib/x86_64-linux-gnu/libASEP11.so /usr/lib/x64-athena/
sudo mkdir /etc/Athena/

sudo gedit /etc/Athena/IDPClientDB.xml
<?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>
 </TokenLibs>
</IDProtect>
sudo gedit /usr/share/p11-kit/modules/firma-digital.module
remote: |bwrap --unshare-all --dir /tmp --ro-bind /etc/Athena /etc/Athena --proc /proc --dev /dev --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind /lib64 /lib64 --ro-bind /var/run/pcscd /var/run/pcscd p11-kit remote /usr/lib/x86_64-linux-gnu/libASEP11.so

Solamente para Debian 9: la línea anterior no funciona porque incluye una versión demasiado antigua de p11-kit. En su lugar debe usarse esta otra línea: module: /usr/lib/x86_64-linux-gnu/libASEP11.so.

sudo gedit /usr/local/sbin/update-p11-kit-symlinks
#!/bin/sh

FIREFOX_LIB=/usr/lib/firefox/libnssckbi.so
FIREFOX_ESR_LIB=/usr/lib/firefox-esr/libnssckbi.so
THUNDERBIRD_LIB=/usr/lib/thunderbird/libnssckbi.so
NSS_LIB=/usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

if [ -e "$FIREFOX_LIB" ]
then
    if ! [ -L "$FIREFOX_LIB" ]
    then
        echo "Firefox libnssckbi.so is not a symlink. Fixing..."
        mv -f "$FIREFOX_LIB" "$FIREFOX_LIB".bak
        ln -s /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so "$FIREFOX_LIB"
    fi
fi

if [ -e "$FIREFOX_ESR_LIB" ]
then
    if ! [ -L "$FIREFOX_ESR_LIB" ]
    then
        echo "Firefox ESR libnssckbi.so is not a symlink. Fixing..."
        mv -f "$FIREFOX_ESR_LIB" "$FIREFOX_ESR_LIB".bak
        ln -s /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so "$FIREFOX_ESR_LIB"
    fi
fi

if [ -e "$THUNDERBIRD_LIB" ]
then
    if ! [ -L "$THUNDERBIRD_LIB" ]
    then
        echo "Thunderbird libnssckbi.so is not a symlink. Fixing..."
        mv -f "$THUNDERBIRD_LIB" "$THUNDERBIRD_LIB".bak
        ln -s /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so "$THUNDERBIRD_LIB"
    fi
fi

if [ -e "$NSS_LIB" ]
then
    if ! [ -L "$NSS_LIB" ]
    then
        echo "NSS libnssckbi.so is not a symlink. Fixing..."
        mv -f "$NSS_LIB" "$NSS_LIB".bak
        ln -s /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so "$NSS_LIB"
    fi
fi
sudo chmod +x /usr/local/sbin/update-p11-kit-symlinks
sudo gedit /etc/systemd/system/p11-kit-proxy-updater.service 
[Unit]
Description=mantenimiento de enlaces a p11-kit-proxy

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-p11-kit-symlinks

[Install]
WantedBy=multi-user.target
sudo systemctl enable --now p11-kit-proxy-updater.service

Solamente para Ubuntu 18.10: A partir de esta versión hay que modificar el fichero /usr/share/p11-kit/modules/p11-kit-trust.module y eliminar o desactivar la última línea agregando un “#” al inicio de esa línea.

sudo gedit /usr/share/p11-kit/modules/p11-kit-trust.module

La última línea quedaría como sigue, el resto no hay que modificarlo:

#disable-in: p11-kit-proxy

Eso es todo. Es necesario reiniciar Firefox y cualquier otra aplicación que use certificados para que se apliquen los cambios. Si se ha insertado el lector y la tarjeta al lector, estas aplicaciones preguntarán por el PIN en páginas donde se solicite autenticación (por ejemplo en el sitio web de Internet Banking del Banco Nacional), lo que indicará que se la instalación ha sido exitosa.

Si el componente de firma del Banco Central está instalado debería funcionar para poder realizar la prueba de firma. El sitio web de Soporte Firma Digital podría usar todavía la prueba de Java y no funciona con los navegadores modernos. En su lugar podría usarse la prueba con el firmador BCCR desde la página de Firma Digital de verificación de certificados (requiere instalar los certificados para poder entrar).

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