Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

DNIe en GNU/Linux -Obsoleto-

ARTÍCULO OBSOLETO: Para una versión más actual puedes leer como instalar DNIe en GNU/Linux.

Actualizado a Febrero de 2010
Una vez instalado un lector de DNI-e, también nos sirve para utilizar tarjetas criptográficas CardOs M4 como las que utiliza por ejemplo la Comunidad Valenciana a través de la ACCV.

Actualizado a 30 de Noviembre de 2009
Ya está aquí el DNI electónico o DNIe. Y por supuesto se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal.

DNIe DNIe

No hay que olvidar que el DNIe tiene sus limitaciones y pegas de seguridad. (Para los “paranoicos” se recomienda utilizar el DNIe únicamente desde sistemas de solo lectura como un CD con Knoppix).
Tampoco hay que olvidar que una firma “normal” es mucho más facil de falsificar que una firma electrónica, pese a que ninguna sea totalmente segura.
 
Las siguientes instrucciones se han probado en Debian Lenny y en Ubuntu Karmic Koala con un lector C3PO LTC31 (de venta en las oficinas de correos por 19,90 €), con un “miniLector Bit4id” del plan avanza2 (es un Advanced Card Systems ACR38-U pero con una caja blanca) y con un lector Omnikey 3021.
C3PO_LTC31 ACS_ACR38-U Omnikey 3021

 

INSTALACIÓN DEL LECTOR

Descargamos los paquetes oficiales del DNIE y los instalamos junto con los paquetes de la distribución necesarios.

$ sudo aptitude install libccid libopenct1 pcscd pcsc-tools mozilla-opensc
# En el caso de Debian Lenny
$ tar xvf Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar 
# En el caso de Ubuntu Karmic Koala usamos los paquetes de Jaunty Jakalop
$ tar xvf Ubuntu_Jaunty_opensc-dnie_1.4.6-2_i386.deb.tar 
libopensc2_0.11.7-7_i386.deb
opensc-dnie_1.4.6-2_i386.deb
opensc_0.11.7-7_i386.deb
$ sudo dpkg -i libopensc2_0.11.7-7_i386.deb
$ sudo dpkg -i opensc_0.11.7-7_i386.deb
$ sudo dpkg -i opensc-dnie_1.4.6-2_i386.deb
# En el caso de Ubuntu Karmic Koala bloqueamos los paquetes
#+ para que no se actualicen, ya que los de la distribución son
#+ más modernos pero el DNIe no funciona con ellos
$ sudo aptitude hold opensc libopensc2

 
Nos indica que hemos de registrar el módulo PKCS#11 en iceweasel/firefox utilizando el enlace que nos crea en el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“.
Indicamos que confiamos en la nueva Autoridad Certificadora (CA) para las tres posibilidades.
 
Podemos comprobar si el sistema reconoce correctamente el lector con el comando “pcsc_scan” y probando a introducir y sacar el DNIe (u otras tarjetas similares):

$ pcsc_scan
PC/SC device scanner
[...]
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted, 
[...]
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
	DNI electronico (Spanish electronic ID card)
	http://www.dnielectronico.es

 Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card removed, 

 
Otras pruebas que podemos hacer son (estas con una tarjeta CardOs M4):

$ opensc-tool -l
Readers known about:
Nr.    Driver     Name
0      pcsc       C3PO LTC31 (00426664) 00 00
$ opensc-tool -a
Using reader with a card: C3PO LTC31 (00426664) 00 00
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
$ opensc-tool -n
Using reader with a card: C3PO LTC31 (00426664) 00 00
CardOS M4

 
Para que funcione bien iceweasel/firefox y detecte el módulo sin problemas se recomienda reiniciar la sesión gráfica (no hace falta reiniciar el equipo).
 
 

USO Y DISFRUTE

Lo primero que hay que saber es que en el DNIe tenemos a nuestra disposición dos certificados, uno para identificarnos (certificado de autenticación) y otro para firmar (certificado de firma), lo que son los dos principales usos del DNIe.

También es importante saber que cada aplicación que utiliza el DNIe establece una “sesión” con el lector de tarjetas y que no puede haber dos sesiones abiertas a la vez. Es decir no podemos usar el DNIe en dos aplicaciones a la vez. Sin embargo muchas aplicaciones no indican adecuadamente esta circunstancia y simplemente parece que no funcionan.
Así por ejemplo si iniciamos sesión en iceweasel/firefox para acceder a una web, no podemos firmar un archivo pdf con sinadura hasta cerrar sesión. Y al revés, tras firmar un fichero con sinadura no nos deja validarnos con iceweasel.
Ante la duda basta con extraer y volver a introducir el DNIe en el lector para asegurarse que está disponible el acceso.
 
Un último recordatorio, si se introduce el PIN del DNIe erróneamente tres veces seguidas, éste se bloquea. Así que al hacer pruebas con los programas y sus configuraciones hay que tener cuidado. A mí se me bloqueó haciendo pruebas con Sinadura (para desbloquearlo hay que pasar 5 minutos por una comisaria), así que después cada vez que hacía una prueba con un programa si no funcionaba perfectamente iniciaba sesión en iceweasel/firefox.
 

Identificarse en sitios web con iceweasel/firefox

El DNIe se puede utilizar al navegar para identificarse en un sitio web. Así por ejemplo si nos identificamos en la web de la seguridad social podremos descargarnos al instante nuestra vida laboral.

Primero debemos asegurarnos que hemos registrado en iceweasel/firefox el módulo de DNIe PKCS#11 (usando el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“).
En caso contrario podemos registrarlo a mano desde “Editar -> Preferencias -> Avanzado -> Cifrado -> Dispositivos de seguridad“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe – OpenSC PKCS#11”, y la ruta del módulo “/usr/lib/opensc-pkcs11.so”.
DNIe
 
Si la instalación ha sido correcta y tenemos el lector conectado con un DNIe introducido, nos habilitará la opción “Iniciar sesión” (¡bien!). Si iniciamos sesión nos pedirá el PIN, pero antes es mejor reiniciar el navegador para que nos pida instalar el certificado de la DGP (Dirección General de la Policia).
 
Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación del portal oficial (el enlace para la verificación está al final de esa página).

Si todo ha ido bien el navegador nos pide nuestro PIN para iniciar sesión (si no lo hemos introducido antes):
PIN DNIe

Cuando conectamos con una web en la que debemos identificarnos nos pregunta cuál de los dos certificados (el de firma o el de autenticación) queremos utilizar. Para identificarnos usamos el de autenticación.
Certificado DNIe

Si el navegador nos indica:

El otro extremo de la conexión SSL no puede verificar su certificado.
(Código de error: ssl_error_bad_cert_alert)

Es porque no hemos iniciado sesión correctamente (hemos fallado el PIN 3 veces, no lo hemos puesto, no está bien instalado el lector…).
 
Lo recomendado es “Iniciar sesión” en el navegador solo cuando se necesita y “Terminar sesión” lo antes posible. Si visitamos una página que requiere certificado sin haber iniciado sesión, el navegador nos solicitará el PIN automáticamente, pero para cerrar sesión hay que ir “a mano” a la opción “Dispositivos de seguridad” del menú.
 

Firmar archivos PDF con Sinadura

Otro uso interesante del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta ahora había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…

Primero descargamos Sinadura, en mi caso he descargado la versión 2.0.0 para GNU/Linux de 32 bits.

Su instalación es muy sencilla, basta con hacer:

$ java -jar  sinadura-2.0.0-unix32-installer.jar

y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…

Para configurarlo vamos a “Sinadura -> Preferencias -> Certificados“, y elegir “Tarjeta Criptográfica“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. Yo me he creado una imagen muy clarita del DNIe en grises.
 

Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
DNIe

El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por el problema de las sesiones que comentabamos al principio) y después nos pide el PIN del DNIe.
DNIe

Después elegimos el certificado a utilizar, en este caso el certificado de firma:
DNIe

Nos solicita una confirmación:
DNIe

Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar
DNIe
 

Más posibilidades

Una de las posibilidades que la gente busca es firmar y/o cifrar correos electrónicos con el DNIe.
Hay que decir que técnicamente se puede pero que su validez legal es cuanto menos dudosa, y como lo que se busca con el DNIe es tener validez legal no es muy práctico. Siempre se puede enviar un correo-e “normal” con un pdf firmado como adjunto, por ejemplo un contrato.

Esto es porque técnicamente para firmar y/o cifrar basta con tener un par de claves pública/privada, pero el estándar internacional PKI requiere, para firmar un correo-e, que el certificado de la clave indique una dirección de correo-e, que será la única que se “certificará”. Sin embargo en el DNIe no se indica ninguna dirección de correo-e, por lo que no se puede utilizar las firmas del DNIe para este fin.
Lo más recomendado es firmar y cifrar con claves GPG, u obtener firmas de la FNMT, que sí están preparadas para este propósito.
En todo caso hay buenas y sencillas guías en internet sobre cómo conseguir, técnicamente, firmar correos-e con el DNIe (GMail+DNIe; Thunderbird+DNIe).

Para consultar otras posibilidades tenemos el oráculo, la página de Servicios Disponibles o la web Kriptopolis.
 
 

Sobre este tutorial

Hay bastantes guías en internet, pero en Julio de 2009 ninguna me daba buen resultado en Debian Lenny. Básicamente parecía que todo iba bien, excepto por el navegador (Iceweasel/Firefox) que “petaba” al introducir un DNIe en el lector. Al final encontré la solución en Guadalinex gracias a una pista de fontanon en univero emergya.
Tras publicar la primera versión de este tutorial con todos los pasos para que el lector funcione en Debian Lenny e indicando los problemas encontrados, se pusieron en contacto conmigo los fabricantes del lector C3PO LTC31 (ver los primeros comentarios a esta entrada) y descubrimos que el problema estaba en el empaquetado de las librerías de la DGT, cosa que a día de hoy (Septiembre de 2009) ya está solucionada.
Después he obtenido otro lector, he tenido problemas para firmar PDFs… y así he ido modificando y haciendo crecer este tutorial hasta llegar a esta versión (Noviembre 2009).

Así pues gracias a la gente de C3PO, de sinadura y a todos los que han puesto información en internet sobre como usar y configurar el DNIe.
 

dnie, dni electrónico, linux, debian, lenny, C3PO LTC31, miniLector Bit4id, ACS ACR38-U
  • Akas84 says:

    Hola,

    Me gustaria comentaros que la versión del DNIe que proponeis está ya bastante anticuada. Actualmente hay paquetes para Debian Lenny 32 y Debian Lenny 64 bits.

    La versión actual es la 1.4.6 y funciona con el opensc-0.11.7 que también se suministran por parte de la DGP. Se han solucionado varios errores como el tema de reinicio de sessión que ya es innecesario. Actualmente el módulo se instala des del menú Aplicaciones->Oficina->Instalar Módulo DNIe, esto lanzará firefox con la web necesaria para instalar el plugin y los certificados Raíz.

    Podeis encontrar un manual de instalación en el siguiente enlace: http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/recomendaciones_instalacion.html –> versión 3.2

    Un saludo,


    Deptartamento técnico de C3PO

    17 July 2009 at 08:34
  • Güimi says:

    Hola,
    gracias por el comentario.

    El hecho de escribir esta entrada es precisamente porque en dos equipos diferentes con Debian Lenny, al realizar la instalación con los paquetes oficiales el firefox (iceweasel) se vuelve totalmente inestable. Hasta el punto que al introducir el DNIe en el lector se cierra el navegador. Es más, con un DNIe introducido, el navegador no consigue arrancar.
    No conseguí averiguar la causa, pero con el paquete de Guadalinex no he tenido ningun problema y todo funciona perfectamente.

    Si quereis que hagamos un seguimiento para intentar encontrar el problema, estaré encantado de colaborar. Podéis escribirme a contacto [arrob@] guimi [.] net.

    Gracias
    Güimi

    17 July 2009 at 09:59
  • Güimi says:

    En colaboración con “Akas84” del departamento técnico de C3PO, hemos detectado que efectivamente la libreria “opensc_0.11.7-7” distribuida con el paquete oficial 1.4.6. para Debian Lenny 32 bits no es la de Debian Lenny sino la de Ubuntu Jaunty, y por eso falla.

    Además en el manual -version 3.2- hay una errata, ya que indica que hay que instalar la libreria “opensc_0.11.7-5_i386.deb” y debería decir “opensc_0.11.7-7_i386.deb”.

    Van a ponerse en contacto con la DGT para que corrijan los errores.

    Me encanta como funciona internet.
    Güimi

    20 July 2009 at 09:55
  • Güimi says:

    Según informa “Akas84”, parece que la DGP ya ha corregido el error y ahora debería funcionar todo correctamente.

    30 September 2009 at 14:53
  • jgonzalez says:

    Hola,
    muchas gracias por el tutorial. Lector instalado y funcionado :-)

    Cómo puedo cerrar la sesión con sinadura sin tener que meter y sacar el DNI?
    Gracias

    2 December 2009 at 11:56
  • Güimi says:

    Hola jgonzalez,
    gracias por el comentario.

    Hasta donde yo sé, no existe la posibilidad de cerrar la sesión en Sinadura. De hecho lo comenté en su foro y me dijeron que lo tendrían en cuenta para próximas versiones (http://www.sinadura.net/foro).

    En todo caso no cuesta mucho lo de meter y sacar el DNIe y así no te lo olvidas dentro del lector ;-)

    Saludos
    Güimi

    2 December 2009 at 12:00
  • nexus88 says:

    cuando abro un pdf que he firmado me dice “signature not verified”
    que es lo que falla?

    3 December 2009 at 11:08
  • Güimi says:

    Hola nexus88,
    gracias por tu mensaje.
    “Signature not verified” significa que el documento está firmado, pero que no se puede verificar si la firma es correcta.
    Eso ocurre por ejemplo con los visores habituales de Debian Lenny (evince, kghostview…) que no “saben” verificar las firmas (si me equivoco que alguien me lo diga).
    Para verificar firmas podemos usar el propio sinadura, como indico en el artículo.
    Otra opción es usar Acrobat Reader. A mí no me gusta mucho acroread, así que uso evince para ver mis pdfs, y después si necesito verificar una firma necesito otro programa (uso sinadura).
    Si quieres usar acroread para ver pdfs y que verifique las firmas es muy sencillo:
    – No uses el acroread de los repositorios (no tiene la parte de verificación de firmas) si no el que hay disponible en la web de Acrobat.
    – Sigue esta estupenda guía en kriptópolis (apartado “Configuración de Acroread para verificar las firmas” ;-)

    Saludos
    Güimi

    3 December 2009 at 11:14