DNIe, DNI electrónico.

Cómo instalar un lector de tarjetas para usar el DNI electrónico español en Debian 7 ‘Wheezy’

En este ejemplo voy a instalar un lector de DNI electrónico del fabricante Soyntec, concretamente el modelo Nexoos 610 (que en realidad es un Dectel CI692), en un ordenador con Debian 7 ‘Wheezy’ de 32 bits, Xfce como entorno de escritorio y Icewasel/Firefox como navegador. Aunque también comento alternativas para sistemas de 64 bits y Gnome y KDE como entornos de escritorio.

Aviso: El soporte para el DNIe español fue incorporado a OpenSC en la versión 0.14 el 27 de agosto de 2013. La versión 0.14 de OpenSC entró en los repositorios de Debian Testing (futuro Debian 8 ‘Jessie’) el cinco de julio de 2014. Las siguientes instrucciones serán útiles únicamente para Debian 7 ‘Wheezy’ y cualquier otra distribución basada en Debian 7 cuyo paquete OpenSC permanezca en su versión 0.12.
Si estás usando Debian Testing (futuro Debian 8 ‘Jessie’) o cualquier otra distribución basada en ella, estas instrucciones serán válidas pero obsoletas. Por favor, sigue las instrucciones que encontrarás en el artículo «Cómo instalar un lector de tarjetas para usar el DNI electrónico español en Debian 8 ‘Jessie’».

Vaya por delante que no usaré ni los recursos ofrecidos por el fabricante del dispositivo ni los códigos “retocados” por la Policía Nacional española.

1. Conecto el lector de tarjetas a un puerto USB fiable (para evitar quebraderos de cabeza, no uso ningún hub, ni siquiera alimentado).

2. Abro una terminal e inicio sesión como root:

$ su -

3. Tras introducir la contraseña del root, compruebo que el lector es detectado:

# cat /var/log/messages

Me devuelve esto:

usb 1-2: new high-speed USB device number 9 using ehci_hcd
usb 1-2: New USB device found, idVendor=0bda, idProduct=0165
usb 1-2: New USB device strings: Mfr=1, Product=6, SerialNumber=3
usb 1-2: Product: Smart Card Reader Interface
usb 1-2: Manufacturer: Generic
usb 1-2: SerialNumber: 20070818000000000
usb 1-2: USB disconnect, device number 9
mtp-probe: checking bus 1, device 9: "/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-2"
mtp-probe: bus: 1, device: 9 was not an MTP device

4. Aprovecho para actualizar el sistema:

# apt-get update
# apt-get upgrade

5. Instalo los paquetes pcscd, pcsc-tools y todas sus dependencias:

# apt-get install pcscd pcsc-tools

6. Y pruebo con el comando pcsc_scan si efectivamente se reconoce el dispositivo sin ningún DNIe introducido:

# pcsc_scan

Me devuelve esto:

PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers...

Reader 0: Dectel CI692 [Smart Card Reader Interface] (20070818000000000) 00 00
 Card state: Card removed.

7. Cierro pcsc_scan presionando Ctrl + c, inserto un DNIe en el lector y vuelvo a probar:

# pcsc_scan

Y ahora me devuelve:

PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers...

Reader 0: Dectel CI692 [Smart Card Reader Interface] (20070818000000000) 00 00
 Card state: Card inserted.

ATR: 3C 7F 39 00 01 01 6B 45 2F 38 65 10 13 4D 31 00 13 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 38 --> Fi=744, Di=12, 62 cycles/ETU
    64516 bits/s at 4 MHz, fMax for Fi = 8 MHz => 129032 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 01 6B 45 2F 38 65 10 13 4D 31 00 13 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 44 4E 49 65 10 02 4C 34 01 13
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3C 7F 39 00 01 01 6B 45 2F 38 65 10 13 4D 31 00 13 03 90 00
3C 7F 39 00 01 01 6B 45 2F 38 65 [1,2]0 13 4D 31 00 13 03 90 00
       DNI electronico (Spanish electronic ID card)
       http://www.dnielectronico.es

8. Cierro pcsc_scan presionando Ctrl + c.

9. Dependiendo del entorno de ventanas que esté utilizando, instalaré el paquete adecuado de pinentry: pinentry-curses para diálogos de consola, pinetry-gtk2 para Gnome o pinentry-qt4 para KDE. En este ejemplo, al usar Xfce, instalaré pinentry-gtk2:

# apt-get install pinentry-gtk2

10. Ya toca instalar el paquete OpenSC pero no voy a instalar la versión 0.12 que está actualmente en los repositorios de Debian 7 ‘Wheezy’ (todavía no soporta el DNIe, lo hará en su versión 0.14) y mucho menos la versión ofrecida por la Policía Nacional. En su lugar descargaré la última versión disponible en la forja del Cenatic (tengo una réplica aquí), prestando atención a la arquitectura de nuestro sistema (i386 para 32 bits o amd64 para 64 bits):

# dpkg -i opensc_0.12.1-1-svn385_i386.deb

11. Importante: Verás que la versión descargada del Cenatic es anterior a la disponible en los repositorios de Debian Testing:

Gestor de paquetes Synaptic.
Gestor de paquetes Synaptic.

Huelga decir que, en la próxima actualización, la nueva versión del paquete machacará al que me interesa. Tengo que bloquear o retener el paquete opensc_0.12.1-1-svn385_i386.deb (u opensc_0.12.1-1-svn385_amd64.deb, según el caso) para evitar su actualización:

# echo "opensc hold" | dpkg --set-selections

12. Importante: Debian 7 tiene un árbol de directorios un tanto diferente a otras distribuciones, esto se debe a la necesidad de dar soporte multiarquitectura. Es por ello que OpenSC no encontrará la librería libpcsclite.so.1 en /usr/lib/. Estará en /usr/lib/i386-linux-gnu/ o en /usr/lib/amd64-linux-gnu/ o en /usr/lib/x86_64-linux-gnu/ o puede que en /usr/lib64/ dependiendo si es un sistema de 32 bits o de 64 bits.

Para solucionarlo, debo buscar libpcsclite.so.1 y una vez sepa en qué directorio está tengo dos alternativas: Crear un enlace simbólico para que OpenSC encuentre esa librería en alguno de los dos directorios o modificar el archivo de configuración de OpenSC para que encuentre la librería en el directorio adecuado.

En este ejemplo, la librería está en /usr/lib/i386-linux-gnu/libpcsclite.so.1

Creo firmemente en que cuantos menos enlaces simbólicos, mejor. Y como en este caso tengo la posibilidad de modificar el archivo de configuración de OpenSC, que está en /etc/opensc/opensc.conf, modifico la siguiente línea:

# Use specific pcsc provider.
# Default: /usr/lib/libpcsclite.so.1
# provider_library = /usr/lib/libpcsclite.so.1
provider_library = /usr/lib/i386-linux-gnu/libpcsclite.so.1

13. Necesito los certificados oficiales de la Dirección General de la Policía para instalarlos en Iceweasel/Firefox. Están en esta página (no es posible hacer una conexión encriptada… Surrealista), descargo y descomprimo los siguientes certificados:

Estos certificados serán válidos hasta 2021 y 2036, según el caso. No será necesario renovarlos hasta entonces.

14. En el menú del navegador, voy a Iceweasel/Firefox Preferencias Preferencias:

Preferencias de Icewasel/Firefox.
Preferencias de Icewasel/Firefox.

En la ventana Preferencias selecciono la sección Avanzado y la pestaña Cifrado. Hago click en el botón Ver certificados:

Preferencias de Icewasel/Firefox.
Preferencias de Icewasel/Firefox.

En la ventana Administrador de certificados selecciono la pestaña Autoridades y hago click en el botón Importar…:

Administrador de certificados.
Administrador de certificados.

Importo uno a uno los cuatro certificados que acabo de descargar y descomprimir:

Descargando certificado.
Descargando certificado.

Verifico que los cuatro han sido importados:

Administrador de certificados.
Administrador de certificados.

15. Vuelvo a la página de la Dirección General de la Policía para descargar y descomprimir dos certificados adicionales:

Aviso: Estos dos certificados caducan a los seis meses de su emisión. Hay que proceder a su renovación (descargar de la página de la Dirección General de la Policía, descomprimir y reimportar -pasos 15 y 16-) unos días antes de la fecha indicada en cada caso.

16. Nuevamente en la ventana Administrador de certificados de Iceweasel/Firefox selecciono la pestaña Servidores y hago click en el botón Importar…:

Preferencias de Iceweasel/Firefox.
Preferencias de Iceweasel/Firefox.

Importo los dos certificados que acabo de descargar y descomprimir. Verifico que ambos han sido importados:

Preferencias de Iceweasel/Firefox.
Preferencias de Iceweasel/Firefox.

17. Al hacer click en el botón Aceptar del Administrador de certificados se cierra y vuelvo a la la ventana Preferencias, sección Avanzado, pestaña Cifrado y hago click en el botón Dispositivos de seguridad:

Preferencias de Iceweasel/Firefox.
Preferencias de Iceweasel/Firefox.

Para encontrarme con que Iceweasel/Firefox no detecta ni el lector de tarjetas ni mucho menos el DNIe:

Administrador de dispositivos.
Administrador de dispositivos.

Esto se debe a que, al igual que OpenSC buscaba la librería libpcsclite.so.1 en /usr/lib/ y no estaba, Iceweasel/Firefox busca el archivo opensc-pkcs11.so en /usr/lib/i386-linux-gnu/ o en /usr/lib/amd64-linux-gnu/ o en /usr/lib/x86_64-linux-gnu/ o puede que en /usr/lib64/ dependiendo si es un sistema de 32 bits o de 64 bits, pero opensc-pkcs11.so está en realidad en /usr/lib/.

Puedo crear un enlace simbólico pero no es imprescindible. Voy a decirle a Iceweasel/Firefox que el archivo está en /usr/lib/opensc-pkcs11.so haciendo click en el botón Cargar de la ventana del Administrador de dispositivos y dejándolo como sigue:

Cargar dispositivo PKCS#11.
Cargar dispositivo PKCS#11.

Ahora sí me aparece el lector de tarjetas, sin el DNIe insertado:

Administrador de dispositivos.
Administrador de dispositivos.

Y con el DNIe insertado:

Administrador de dispositivos.
Administrador de dispositivos.

18. Para terminar, pruebo el correcto funcionamiento del DNIe accediendo a cualquier servicio de la Administración Pública española que lo requiera. Por ejemplo, descargaré el informe de mi vida laboral de la Tesorería General de la Seguridad Social.

Miguel Menéndez

Administrador de sistemas, auditor de redes y seguridad.