En nuestro país la utilización del DNI-e (electrónico) está poco
extendida. Esto se debe al poco soporte que nos brinda la
Administración, haciendo que su instalación sea complicada, incluso en
Win2. Además hay que sumar que las Autoridades de certificación no
acaban de ponerse en contacto con los distintos navegadores para añadir
los certificados con las correspondientes excepciones de seguridad.

Vamos ver como instalarlo en Ubuntu (32 y 64 bits) y de esta forma
poder acceder a páginas web oficiales y hacer todo tipo de trámites sin
tener que ir de oficina en oficina.

Aunque no lo he testeado aún en Debian y otras derivadas, esta
instalación debe de funcionar también, sin mayores problemas. Solo hay
que tener en cuenta las rutas de los directorios y/o archivos que pueden
cambiar según distribución / versión:

  • /etc/opensc
  • /usr/lib/pkcs11
  • /etc/opensc/opensc.conf

0.- Oracle Java

Para realizar trámites en línea, en la mayoría de las páginas web de la
Administración será necesario tener instalado Oracle Java.

Además, hay que estar pendiente de que el navegador no bloquee Java y
darle permisos. Suele aparecer una barra en la parte superior del
navegador, donde nos pedirá si deseamos que se ejecute Java.

1.- Instalación del hardware (lector)

En mi caso he instalado el lector c3po LTC31.

La mayoría de los lectores de DNI-e funcionan en GNU/Linux con el driver CCID a través del servicio pcscd.

1.1 – Instalación del controlador

Para Ubuntu y en general todas las derivadas de Debian, instalar los siguientes paquetes:

  • libccid (biblioteca que proporciona una implementación
    PC/SC del controlador de IFD para lectores USB de tarjetas inteligentes,
    compatibles con el protocolo CCID. Este paquete es necesario para
    comunicarse con los lectores de tarjetas inteligentes a través de CCID
  • pcscd (El demonio PC/SC se utiliza para asignar / cancelar
    dinámicamente los controladores del lector y administrar conexiones a
    los lectores.)

Desde la terminal sería:

sudo apt-get install libccid pcscd
 
Si tu lector está basado en ACR38, instalar el controlador:
 
sudo apt-get install libacr38u
 

1.2- Instalación de librerías o bibliotecas

Instalar las siguientes librerías o bibliotecas y paquetes complementarios:

  • pinentry-gtk2 (Programa que permite garantizar la entrada
    de PIN o frases de contraseña. Esto significa que trata de cuidar que
    la información introducida no se intercambie en el disco o se almacene
    temporalmente en cualquier lugar. Esta funcionalidad es especialmente
    útil para introducir frases de contraseña cuando se utiliza software de
    cifrado GnuPG o como clientes de correo electrónico utilizando el mismo.
    Utiliza un protocolo abierto y por lo tanto, no vinculado a
    determinados programas)
  • pcsc-tools (“Gscriptor” contiene herramientas útiles para PC/SC, como pcsc_scan
    que analiza lectores de tarjetas inteligentes disponibles otras
    detectan los eventos como la inserción y extracción de la tarjeta con
    ATR …)
  • libpcsclite1 y libpcsclite-dev (El propósito de PC/SC
    Lite es proporcionar una interfaz de tipo SCard de Windows(R) para
    comunicarse con tarjetas inteligentes y lectores)
  • libreadline6 y libreadline-dev (una biblioteca
    readline de GNU que ayuda en la consistencia de interfaces de usuario a
    través de programas discretos que necesitan proporcionar una interfaz en
    línea de órdenes)
  • coolkey (Soporte de controladores de Linux para las tarjetas
    inteligentes CoolKey and Common Access Card (CAC) con claves de
    seguridad utilizadas en una Infraestructura de Clave Pública (PKI). El
    módulo de libpkcs11 permite el uso de tarjetas inteligentes en
    aplicaciones como Mozilla Network Security Services (NSS))

Instalación de todos estos paquetes desde la terminal:

sudo apt-get install pinentry-gtk2 pcsc-tools libpcsclite1 libpcsclite-dev 
libreadline6 libreadline-dev coolkey

Llegados a este punto ya podemos probar si Ubuntu detecta el lector y
puede leer el DNI-e, una vez conectado el lector usb e introducido el
DNI-e.

Para ver si Ubuntu detecta el lector ejecuta en una terminal el siguiente comando:

lsusb
 
La terminal nos responderá algo parecido a:
 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 002 Device 002: ID 0783:0006 C3PO LTC31v2

Bus 005 Device 002: ID 046d:c05a Logitech, Inc. Optical Mouse M90
 
En la línea Bus 002 Device 002: ID 0783:0006 C3PO LTC31v2, vemos que ha detectado 
mi lector "c3po LTC31" (el nombre variará según sea vuestro lector)



Ahora vamos a ver si lee el DNI-e con el comando: 

pcsc_scan
 
La terminal nos devolverá algo parecido a:

PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau
Compiled with PC/SC lite version: 1.7.4
Using reader plug’n play mechanism
Scanning present readers…
0: C3PO LTC31 (00452764) 00 00

Tue May 15 19:36:54 2012
Reader 0: C3PO LTC31 (00452764) 00 00
Card state: Card inserted,
ATR: 1A 2B 36 00 00 00 8k 44 5L 49 1A 2B 36 00 00 00 8K 44 5L 49

ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 2B 36 00 00 00 8K 44 5L 49
+ 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: 00 8k 44 5L 49 1A 2B 36 00 00 00 8K 44 5L 49
Category indicator byte: 00 (compact TLV data object)
Tag: 6, len: A (pre-issuing data)
Data: 1A 2B 36 00 00 00 8k 44 5L 49
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):
1A 2B 36 00 00 00 8k 44 5L 49 1A 2B 36 00 00 00 8K 44 5L 49
1A 2B 36 00 00 00 8k 44 5L 49 1A [1,2]0 36 00 00 00 8K 44 5L 49
DNI electronico (Spanish electronic ID card)
http://www.dnielectronico.es

Vemos que ha leido el DNI-e en las líneas:

Reader 0: C3PO LTC31 (00452764) 00 00
Card state: Card inserted,

Pulsamos la combinación de teclas CTRL+Z para detener el proceso y cerramos la terminal.

Nota: Si la terminal se queda pensando intentando leer el DNIe,
puede ser necesario reiniciar el sistema con el lector conectado y el
DNIe introducido.

2.- Instalación del software del DNI-e

2.1.- Añadir Certificado y Validación de las Autoridades:

Lo primero que vamos a hacer es descargar los certificados del DNI-e
para instalarlos en el navegador, uno para la autoridad de certificación
y otro para la Autoridad de validación del DNIe. Para ello vamos a la
siguienta página:
http://www.dnielectronico.es/seccion_integradores/certs.html

  • Para la Autoridad de certificación (La Dirección General de la Policía (Ministerio del Interior) actúa como Autoridad de Certificación (AC)):
    Haz clic en el enlace: “AC Raíz
    y descarga el archivo: “pkcs1-sha256WithRSAEncryption“.
  • Para la Autoridad de validación del DNIe
    (certificado que suministra información sobre la vigencia de los
    certificados electrónicos, que será el de la FMNT (Fábrica Nacional de
    Moneda y Timbre)):
    Haz clic en el enlace: “AV DNIE FNMT
    y descarga el archivo: “pkcs1-sha256WithRSAEncryption“.

Nota: En este último podréis ver que hay varias versiones con
diferentes periodos de validez. Descargaremos el actual y si en un
futuro nos falla puede ser debido a que tengamos que volver a descargar /
instalar una nueva versión con la fecha de validez actualizada.

Una vez descargados, hacemos en cada uno respectivamente, clic derecho y
seleccionamos “extraer aquí” y ya tendremos los certificados
“ACRAIZ-SHA2.crt” y “AVDNIEFNMTSHA2.cer”.

Abrimos Firefox e importamos los certificados:

Para la Autoridad de certificación vamos al menú: “Editar >
Preferencias > Avanzado > Cifrado > Ver certificados” y en la
pestaña “Autoridades”, hacemos clic en “Importar” y seleccionamos el
archivo descomprimido “ACRAIZ-SHA2.crt”.

Se nos abrirá una ventana en la que debemos de marcar las 3 opciones de
confianza (muy importante). Si lo hubieramos dejado en blanco se pueden
volver a activar, pulsando en el certificado “AC RAIZ DNIE” y pulsando
en (editar confianza …):

Nos aseguramos de se ha importado buscando en la lista de certificados “DIRECCIÓN GENERAL DE LA POLICIA (AC RAIZ DNIE)”:

Para la Autoridad de validación del DNIe en el mismo menú (Editar >
Preferencias > Avanzado > Cifrado > Ver certificados), en la
pestaña “Servidores”, hacemos clic en “Importar” y seleccionamos el
archivo descomprimido “AVDNIEFNMTSHA2.cer”.

Nos aseguramos de se ha importado buscando en la lista de certificados “DIRECCIÓN GENERAL DE LA POLICIA (AC DNIE FNMT)”:

2.2.- Preinstalación:

Para compilar el código fuente necesitaremos instalar algunas herramientas:

  • build-essential (Siempre lo recomiendo en cosas que hacer
    después de instalar Ubuntu, pero no está mal asegurarse de su
    instalación. Este paquete contiene una lista informativa de los paquetes
    considerados esenciales para la creación de paquetes .deb)
  • autoconf (El estándar para los paquetes de código fuente de FSF (Fundación para el software libre))
  • subversion (también conocido como svn, es un sistema de control de versiones muy parecido a «Concurrent Versions System» (CVS))
  • openssl y libssl-dev (Este paquete contiene los binarios y las biblioteca relacionadas para openssl)
  • libtool y libltdl-dev (script de soporte para
    bibliotecas genéricas. Libtool esconde la complejidad de generar tipos
    especiales de bibliotecas (como las bibliotecas compartidas) tras una
    interfaz consistente. Para usar libtool, agregue los nuevos comandos
    genéricos de construcción de bibliotecas a su Makefile, Makefile.in, o
    Makefile.am)
  • pkg-config (es un sistema para gestionar las opciones de
    compilación y enlazado de las bibliotecas, funciona con automake y
    autoconf. Las bibliotecas incrementables tienen unos archivos «.pc» que
    permiten al compilador y al enlazador consultar las opciones necesarias
    para usarlos en el programa pkg-config() 
sudo apt-get install build-essential autoconf subversion openssl libssl-dev libtool 
libltdl-dev pkg-config
 
Lo que vamos a hacer es compilar el código fuente de una versión de 
"opensc" especialmente modificada para el DNI-e, por lo que si tenemos 
instalada la versión de los repositorios hay que desinstalarla antes con
 el comando:
 
sudo apt-get autoremove openscEn 
 
el sistema de archivos de  Ubuntu falta un directorio necesario para la compilación del 
código fuente, en concreto "/etc/opensc". Para crearlo ejecutamos en una
 terminal:

sudo mkdir /etc/openscEn 
 
otras distribuciones / versiones  también puede faltar el directorio "/usr/lib/pkcs11". 
Verificar su existencia y en caso negativo crearlo con:

sudo mkdir /usr/lib/pkcs11
 
Creamos un nuevo directorio en nuestra carpeta personal donde descargar
 el código fuente y compilar con posterioridad. Lo llamaremos por ejemplo ".openscDNIe
(el punto delante es para que esté oculto y no nos estorbe en nuestra carpeta personal
(Ctrl+H para ver archivos ocultos)). Lo creamos con el comando:

mkdir .openscDNIe
 
Nos colocamos dentro del nuevo directorio con el comando:

cd .openscDNIe 

2.3.- Descarga del código fuente:

En el servidor de Cenatic están los archivos actualizados para la última versión y los descargamos directamente con el siguiente comando:

svn checkout --username anonsvn https://forja.cenatic.es/svn/opendnie/opensc-opendnie/trunk
 
Posible solicitud de contraseña del anillo de claves: Si nos aparece un aviso similar a:

WARNING: gnome-keyring:: couldn’t connect to: /tmp/keyring-F8siE7/pkcs11: No existe el archivo o el directorio
Clave para el anillo de claves GNOME ‘(null)’:

Escribimos la contraseña de nuestro usuario y pulsamos “Enter”. (la contraseña no se ve mientras se escribe por seguridad)

Ahora nos pedirá el “password” para el usuario anonsvn:

Reino de autentificación: Document repository
Clave de «anonsvn»:

Escribimos (no se ve al escribirlo):

anonsvn
 
Al finalizar la descarga se habrá creado una nuevo directorio llamada "trunk" dentro 
del directorio donde estamos colocados en la terminal: ".openscDNIe".



2.4.- Compilación del código fuente:

Dentro de Trunk está todo el código fuente, por lo que debemos de
colocarnos dentro de él, para comenzar la compilación, con el comando:

cd trunk
 
Atención, durante la instalación debemos de ejecutar todos los comandos 
desde esta misma terminal y siempre dentro del directorio 
".opendnie/trunk", manteniendo el prompt (línea inicial del terminal) 
en: "usuario@usuario-equipo:~/.opendnie/trunk$"



Antes de la compilación hay que añadir la ruta de la librería "libltdl.la" en el 
archivo "src/tools/Makefile.am" del código fuente (dentro de "trunk"). 
La ruta variará según sea la  arquitectura (32 o 64 bits) de nuestro Ubuntu.
 Para ver la ruta  ejecutamos en la terminal:
 
 
sudo find / -name libltdl.la
 
a respuesta puede tardar y nos devolverá la ruta exacta (en este ejemplo es para 64 bits):

/usr/lib/x86_64-linux-gnu/libltdl.la

Editamos el archivo del Makefille.am con el comando:

sudo gedit src/tools/Makefile.am
 
Buscamos la siguiente línea:

LIBS = $(top_builddir)/src/common/libcompat.la
              $(top_builddir)/src/libopensc/libopensc.la

Situamos el cursor al final de la 2ª línea (“$(top_builddir)/src/libopensc/libopensc.la”) y tecleamos: “Espacio en blanco”, “barra invertida” (), “Enter”, “tabulador” y la ruta que hayas sacado antes (En el ejemplo: /usr/lib/x86_64-linux-gnu/libltdl.la). Quedaría así para el ejemplo:

LIBS = $(top_builddir)/src/common/libcompat.la
              $(top_builddir)/src/libopensc/libopensc.la

              /usr/lib/x86_64-linux-gnu/libltdl.la

Guarda y cierra el editor de textos.

Preparamos el entorno de compilación con el comando:

./bootstrap
 
Al terminar y ver de nuevo el prompt ("usuario@usuario-equipo:~/.opendnie/trunk$") ejecutamos:
 
./configure --prefix=/usr --sysconfdir=/etc/opensc
 
Al terminar y ver de nuevo el prompt ("usuario@usuario-equipo:~/.opendnie/trunk$"), 
generamos el archivo "makefile" con: 

make
 
Al terminar y ver de nuevo el prompt ("usuario@usuario-equipo:~/.opendnie/trunk$"), 
compilamos e instalamos con: 

 

sudo make install
 
Cuando finalice la compilación e instalación (puede tardar), el 
dispositivo o módulo de seguridad "PKCS11" habrá quedado instalado en la
 ruta: "/usr/lib/opensc-pkcs11.so"



Para finalizar hay que añadir el módulo y su ruta al navegador. Para 
ello abrimos firefox y vamos al menú "Editar > Preferencias > 
Avanzado > Cifrado > Dispositivos de seguridad", pulsamos en 
"Cargar" y en la nueva ventana:

  • En “Nombre del módulo“, escribimos: PKCS11
  • En “Archivo del módulo“, escribimos la ruta: /usr/lib/opensc-pkcs11.so

Reiniciamos el navegador y ya esteremos en disposición de utilizar el DNI-e.

3.- Comprobación del DNIe

Una vez reiniciado ya podemos probar el DNI-e.

3.1- Identificación protegida por Token:

El pin del DNIe está protegido por token y para evitar el siguiente error a la hora de introducirlo:

Editamos el archivo “opensc.conf” que según la distribución / versión
que utilices, se encuentra en distintas rutas del sistema de archivos:

Para saber en que ruta está, buscamos el archivo con:

sudo find / -name opensc.conf
 
En Ubuntu nos aparece en:

/home/usuario/.openscDNIe/trunk/etc/opensc.conf
/etc/opensc/opensc.conf

Donde descartamos el archivo contenido en nuestra carpeta personal: /home/usuario/.openscDNIe/trunk/etc/opensc.conf
Y nos quedamos con el otro: /etc/opensc/opensc.conf

Una vez conocida su ruta editamos el archivo con:

 
sudo gedit /etc/opensc/opensc.conf
 
Buscamos en el archivo las líneas (son 2, una al principio y otra al final del archivo) que pongan:

# enable_pinpad = false;

y las descomentamos (borrar la almohadilla que hay delante de la línea). Deben de quedar así:

enable_pinpad = false;

3.2- Comprobación:

Ya podemos probarlo en:
http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html

Nos da unas explicaciones y al final está el enlace de comprobación (Enlace “FMNT”).

El lector parpadeará y nos pedirá el pin del DNI-e. Lo escribimos y aceptamos.

Nota: La primera vez Firefox, nos avisará de que la conexión no
estará verificada. Pulsamos en “Entiendo los riesgos” y luego en “Añadir
una excepción”:

4. – Pin y certificado personal del DNI-e

El pin te lo dieron al recibir el DNI-e.

En las comisarías de Policía hay puntos de Actualización del DNI-e,
donde introduciendo tu DNI-e y tu huella dactilar, puedes cambiar el pin
(si lo has perdido) y activar el certificado (si está caducado).

Los certificados caducan a los 30 meses (creo recordar) y se puede
volver a activar en la misma comisaría, pulsando en “acceder a tus datos
personales > renovar certificado” (Te volverá a pedir que pongas la
huella dactilar en el lector de huellas).

Y esto es todo amigos, si les ha gustado y les ha servido de ayuda, comenten y compartan en mi pagina de facebook.

Gracias de antemano por su atención.