Como utilizar una tarjeta Izenpe en Linux

Nota: Habilita AUR antes de utilizar esta guía.

Instalación de Paquetes

Primero, instalaremos los siguientes paquetes:

pcsc-tools ccid opensc libbit4opki ca-certificates-izenpe

Puedes hacerlo utilizando pamac (Añadir/Quitar Software) o a través de la terminal con yay, paru y otros gestores de AUR.

Idazki Desktop

Idazki Desktop debe ser instalado de forma independiente. Instalar el paquete desde el gestor de paquetes da muchos problemas de configuración y no está soportada por IZENPE. Para instalar Idazki Desktop, descargamos el archivo Linux 64 (RUN).

Una vez hayamos descargado el archivo, tenemos que hacerlo ejecutable haciendo click derecho sobre el archivo, pestaña Permisos, y hacemos click en el checkbox de «es ejecutable».

Pantalla de propiedades de idazki-desktop-linux64.run

Luego tenemos que ir a una terminal, porque necesitamos permisos de superusuario para ejecutar el programa. Podemos hacerlo con el siguiente comando:

sudo ./idazki-desktop-linux64.run

Una vez hecho ésto, la última parte que veremos será un error sobre un .desktop. No necesitamos preocuparnos por ello.
En el menú de aplicaciones habrán aparecido dos aplicaciones nuevas: Idazki Desktop e Idazki Giltza. Son programas que hablarán con nuestro navegador cuando tengamos que hacer gestiones con Izenpe.

Antes de pasar al navegador, tenemos que dar soporte a la librería libbit4opki.so en Idazki para que pueda reconocer nuestro lector de tarjetas. Ésto se hace accediendo a la carpeta /usr/local/idazki-desktop/ y allí tendremos que editar el archivo pkcs11.properties y añadir las siguientes líneas al final:

/usr/lib/bit4id/libbit4opki.so
/usr/lib64/bit4id/libbit4opki.so

De modo que el archivo quedará así:

Librería libbit4opki.so en el archivo pkcs11.properties

Con esto habremos configurado el programa Idazki Desktop e Idazki Giltza para firma de documentos a través del navegador.

Módulo Firefox

Si utilizamos Firefox, tendremos que añadir el módulo de seguridad que nos permite identificar nuestra tarjeta en el navegador. Para ello, vamos a Menú > Ajustes > Privacidad y Seguridad y en el apartado Seguridad pulsamos el botón Dispositivos de Seguridad.

Dentro de la ventana que nos aparece, pulsamos el botón Cargar. En la ventana que nos sale, pondremos un nombre descriptivo como Izenpe y cargaremos el módulo que se encuentra en la siguiente ruta:

/usr/lib64/bit4id/libbit4opki.so

Para que quede de este modo:

Módulo PKCS#11 compatible con Izenpe

Pulsamos Aceptar y habremos cargado el módulo que nos permite identificarnos y firmar con tarjetas Izenpe en nuestro navegador.

Lectura de Tarjeta

Antes de nada, debemos habilitar el servicio de pcsc para poder hacer la lectura de nuestra tarjeta Izenpe. Para ello, en una terminal, escribimos el siguiente comando.

sudo systemctl enable --now pcscd

Ahora, puedes conectar tu lector de tarjetas si no lo habías hecho antes. Para comprobar que el lector se reconoce y que la tarjeta funciona correctamente, podemos ejecutar el siguiente comando en una terminal.

pcsc_scan

Cuando insertemos nuestra tarjeta, veremos una imagen parecida a esta:

Una tarjeta Izenpe leída por pcsc_scan

Identificación en Servicios

Para comprobar que nos hemos identificado correctamente, podemos utilizar el servicio de prueba de firma de Izenpe disponible en la siguiente página pulsando el botón Probar Identificación.

Si todo sale bien, nos pedirá la contraseña de nuestra tarjeta en la ventana emergente. Una vez introducida, nos redirigirá a una página donde nos mostrará los datos de nuestra tarjeta y certificado Izenpe.

Identificación Izenpe correcta

Entradas relacionadas

3 comentarios en «Como utilizar una tarjeta Izenpe en Linux»

  1. ¡Hola! Estupendo el artículo. Ocurre que con algunos sistemas modernos, como Opensuse Tumbleweed o Fedora 41, y especialmente a raíz del ticketbai, esto es más complejo.
    Yo utilizo Fakturaraba desde el navegador, que firma con Idazki Desktop. El propio navegador hace la llamada a Idazki desktop; pero por alguna razón que desconozco, la aplicación no llega a abrirse, simplemente no hace nada. La aplicación en sí parece estar instalada con normalidad, cuando se la abre directamente desde el escritorio. ¡Saludos!

    1. Buenas! Creo que cuando se ejecuta desde la web, se ejecuta el Idazki Desktop delegado, que se ejecuta así: java -Xmx512m -Xms512m -jar /usr/local/idazki-desktop/idazkiDelegado.jar %U

      Puede que esté teniendo problemas para ver el Idazki delegado o este dando algún error?

      1. Hola, cuando pongo ese comanda que indica, obtengo el siguiente resultado:

        [TRACE] 2025/05/10 12:40:40.924 LogUtils:18 – IZENPELIB Core Version is 3.6.2
        [TRACE] 2025/05/10 12:40:40.937 LogUtils:19 – TIME: Sat May 10 12:40:40 CEST 2025
        [TRACE] 2025/05/10 12:40:40.938 LogUtils:49 – Leyendo propiedades por defecto…
        [TRACE] 2025/05/10 12:40:40.938 LogUtils:54 – proxyAuto=true [no se ha encontrado la propiedad: se establece la configuracion del sistema]
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:59 – proxyAutoUser=null
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:60 – proxyAutoPassword=null
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:61 – proxy=null
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:64 – connectTimeOut=60000
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:67 – readTimeOut=60000
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:70 – enablePinCache=false
        [TRACE] 2025/05/10 12:40:40.939 LogUtils:73 – maxPinSession=14400000
        [TRACE] 2025/05/10 12:40:40.940 LogUtils:81 – dlgcertsel-selectfirst=true
        [TRACE] 2025/05/10 12:40:40.940 LogUtils:84 – enableMozillaKeyStore=false
        [TRACE] 2025/05/10 12:40:40.940 LogUtils:87 – mozillaUserProfile=
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:90 – showCNPinDialog=false
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:93 – log4jAppend=false
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:23 – Leyendo propiedades del sistema…
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:25 – JAVA SYSTEM os.name=Linux
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:26 – JAVA SYSTEM os.arch=amd64
        [TRACE] 2025/05/10 12:40:40.941 LogUtils:27 – JAVA SYSTEM java.vendor=Red Hat, Inc.
        [TRACE] 2025/05/10 12:40:40.942 LogUtils:28 – JAVA SYSTEM java.version=21.0.7
        [TRACE] 2025/05/10 12:40:40.942 LogUtils:29 – JAVA SYSTEM java.class.version=65.0
        [TRACE] 2025/05/10 12:40:40.942 LogUtils:30 – JAVA SYSTEM file.encoding=UTF-8
        [TRACE] 2025/05/10 12:40:40.943 LogUtils:31 – JAVA SYSTEM java.class.path=/usr/local/idazki-desktop/idazkiDelegado.jar
        [TRACE] 2025/05/10 12:40:40.943 LogUtils:33 – JAVA RUNTIME freeMemory=522207456
        [TRACE] 2025/05/10 12:40:40.943 LogUtils:34 – JAVA RUNTIME maxmem=536870912
        [TRACE] 2025/05/10 12:40:40.944 LogUtils:36 – PROXY http.useProxy=null
        [TRACE] 2025/05/10 12:40:40.944 LogUtils:37 – PROXY http.proxyHost=null
        [TRACE] 2025/05/10 12:40:40.944 LogUtils:38 – PROXY http.proxyPort=null
        [TRACE] 2025/05/10 12:40:40.944 LogUtils:39 – PROXY https.proxyHost=null
        [TRACE] 2025/05/10 12:40:40.944 LogUtils:40 – PROXY https.proxyPort=null
        [TRACE] 2025/05/10 12:40:40.945 LogUtils:42 – SOCKS socksProxyHost=null
        [TRACE] 2025/05/10 12:40:40.945 LogUtils:43 – SOCKS socksProxyPort=null
        [TRACE] 2025/05/10 12:40:40.945 LogUtils:45 – java.net.useSystemProxies=null
        Exception in thread «main» java.lang.StringIndexOutOfBoundsException: Range [0, -1) out of bounds for length 2
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
        at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
        at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
        at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
        at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
        at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
        at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4865)
        at java.base/java.lang.String.substring(String.java:2834)
        at com.izenpe.idazki.delegado.utils.DelegadoUtils.getServiceURL(DelegadoUtils.java:14)
        at com.izenpe.idazki.delegado.Main.main(Main.java:52)

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.