lunes, 12 de noviembre de 2012

Instalar el DNI-e electrónico en Ubuntu 12.04 y 12.10


Instalar el DNI-e electrónico en Ubuntu 12.04 y 12.10

Actualizado el 11 de Octubre de 2012


Para poder utilizar sin problemas el DNI-e (electrónico) en Ubuntu 12.04 (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, seguiremos los siguientes pasos.

Actualización para Ubuntu 12.04: Cenaptic ha modificado la descarga del código fuente de "opensc", añadiendo un usuario y contraseña que he actualizado en la guía.


Solo para Ubuntu 12.10 : En el sistema de archivos faltan dos directorios necesarios para la compilación del código fuente, en concreto "/usr/lib/pkcs11" y "/etc/opensc". Para crearlos ejecutamos en una terminal estos 2 comandos:
sudo mkdir /usr/lib/pkcs11
sudo mkdir /etc/opensc
Y ya seguimos con los mismos pasos de la guía, que son iguales para ambas versiones (12.04 y 12.10)


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


Hay 2 métodos:

2.1 - Asistente de ZonaTic


En la página de descargas del DNI-e hay un enlace al asistente de ZonaTic.


En estos momentos este asistente aún no soporta Ubuntu 12.04 y mucho menos la 12.10 y dará error al ejecutarlo, pero lo dejo aquí en previsión de que en un futuro funcione.


ZonaTIC ha creado un asistente para la instalación del DNI-e que nos va a facilitar su instalación:
https://zonatic.usatudni.es/gl/aplicaciones/asistente-dnie.html

En la misma página nos advierte al principio que es necesario tener instalado " Java Access Bridge". Instalación:
sudo apt-get install libaccess-bridge-java

Pulsamos en "Zona de descargas" y descargamos la versión para Linux (Ubuntu) en nuestra carpeta personal.

Damos permisos al archivo descargado, haciendo clic derecho sobre él y seleccionando "propiedades" y en la pestaña permisos activar la casilla "permitir ejecutar el archivo como un programa".

Lo ejecutamos desde una terminal con el comando (considerando que el nombre del archivo descargado sea 'instalador-dnie'):
sudo ./instalador-dnie

Comienza el asistente. Aquí tenéis una detallada explicación por si os surge alguna duda:
https://zonatic.usatudni.es/aplicaciones/asistente-dnie/ayuda


2.2 - Compilación del código fuente


Lo primero que vamos a hacer es instalar 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".

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)":



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 opensc

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

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

Al introducir el comando, la terminal te pedirá que aceptes un certificado para la descarga:
Error validando el certificado del servidor de «https://svn.forge.morfeo-project.org:443»:
- El nombre de máquina del certificado no coincide.
- El certificado ha expirado.
Información del certificado:
- Nombre de máquina: morfeo-project.org
- Válido desde Thu, 18 Mar 2010 09:57:43 GMT hasta Sat, 17 Mar 2012 09:57:43 GMT
- Emisor: http://www.cacert.org, Root CA
- "Huella": f0:73:dc:0a:01:16:fb:85:df:f4:17:9b:50:e6:55:37:2b:38:65:39
¿(R)echazar, aceptar (t)emporariamente o aceptar (p)ermanentemente?
Lo aceptamos temporalmente, escribiendo "t" ( te, sin ") y pulsando Enter.

Ahora nos pedirá el "password" para el usuario, escribimos (no se ve al escribirlo):
anonsvn
Y comenzará la descarga (Gracias a Alejandro que nos ha dejado la solución del password en la nueva modificación que ha hecho Cenatic

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

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
La 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.

A la hora de escribir el pin del DNI-e, aparece un aviso de: "Identificación protegida por Token":



Para solventarlo editamos el archivo "opensc.conf" con el comando:
sudo gedit /etc/opensc/opensc.conf
Buscamos las líneas (son 2, una al principio y otra al final del archivo) que pongan:
# enable_pinpad = false;
y las descomentamos (quitar la almohadilla que hay delante de la línea). Deben de quedar así:
enable_pinpad = false;
Reiniciamos el sistema.

Una vez reiniciado ya podemos probar el DNI-e en:
http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html

Nos da unas explicaciones y al final está el enlace de comprobación.

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":



3. - 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).

Fuentes:
www.c3po.es
www.dnielectronico.es
www.opensc-project.org
www.cenatic.es
bitplanet.es
http://www.ubuntu-guia.com/2010/08/dni-e-electronico-ubuntu-instalar.html