Hiparco

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

Alojado en http://guimi.net

Firma digital con Debian GNU/Linux y Sinadura

Uno de los usos interesantes del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta hace poco 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…

Sinadura permite firmar digitalmente tanto archivos PDF como otro tipo de archivos.

Vamos a instalar Sinadura 3.3.3 en Debian GNU/Linux Wheezy (Debian 7).

Primero descargamos Sinadura, en este caso he descargado la versión 3.3.3 para GNU/Linux de 64 bits:

$ wget http://www.sinadura.net/documents/18043/196213/sinaduraDesktop-3.3.3-unix64-installer.jar

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

$ java -jar sinaduraDesktop-3.3.3-unix64-installer.jar

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

…pero no funciona todavía. Hay que modificar un detalle de opensc:

# vi /etc/opensc/opensc.conf

Buscar y descomentar (quitar el ‘#’) la siguiente línea:

# plug_and_play = false;
 plug_and_play = false;

Para configurar Sinadura vamos a “Archivo -> Preferencias -> Firma -> Certificados“, y elegir “Tarjeta Inteligente“.
También recomiendo ir a “Archivo -> Preferencias -> Firma -> PDF” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. De paso cambiamos la razón, la ubicación y la certificación por defecto (No permitir cambios).
Yo me he creado una imagen muy clarita del DNIe en grises y la he copiado en /sinadura/resources/images.
 

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 un problema de sesiones: sacar e introducir el DNI) 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

firma digital, dnie, dni electrónico, linux, debian, wheezy, sinadura

Instalando y configurando conky

Conky es una herramienta de monitorización muy potente.
Aunque se pueden hacer maravillas con él, yo prefiero una configuración sobria.

Su instalación es tan sencilla como siempre:

# aptitude install conky

Y lo configuramos mediante:

$ vi .conkyrc
# Conky configuracion file
# 2013 - Guimi
# http://www.guimi.net
# 

#### BASIC CONFIGURATION ###############################
# Overrided by execpi argument
update_interval 2.0
#text_buffer_size 2048
text_buffer_size 512
minimum_size 5 5
no_buffers yes
out_to_console no
out_to_stderr no
use_spacer none
# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes
stippled_borders 0
# background (make it a daemon)
#background no
background yes

#### WINDOWS ###########################################
# Usual problems: conky dissapears when minimizing windows
# or when cliking desktop
# that's why I let conky be at taskbar
## Create own window in instead of using desktop?
own_window yes
own_window_transparent yes
#own_window_type normal
# disappears when minimizing
own_window_type window
#own_window_type override
#own_window_type desktop
#own_window_type normal
own_window_class Conky
#own_window_class conky-semi
#own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_hints undecorated,below,sticky,skip_pager

#### DATA DISPLAY CONF #################################
# Text alignment, other possible values are commented
alignment top_left
#alignment top_right
#alignment bottom_left
#alignment bottom_right
#alignment none
show_graph_scale no
show_graph_range no
cpu_avg_samples 2
net_avg_samples 2
extra_newline no
uppercase no
## Shorten MiB/GiB to M/G in stats.
short_units yes
# X font when Xft is disabled, you can pick one with program xfontsel
#font 5x7
#font 6x10
#font 7x13
#font 8x13
#font 9x15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*
# Use Xft?
# xft is required to Force UTF8 (see below)
use_xft yes
xftfont DejaVu Sans Mono:size=10
override_utf8_locale yes

#### BASIC DISPLAY CONF ################################
maximum_width 300
gap_x 1370
#gap_y 60
gap_y 5

border_width 1
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no

## My colors (suit yourself)
color0 White
color1 LightGrey
color2 Tan1		#FFA54F
color3 Grey

##################################### TEXT ##################################
TEXT
#### SYSTEM ############################################
#${scroll 16 $nodename - $sysname $kernel on $machine | }
${color2}$nodename${color1} - $sysname $kernel (${color0}$machine${color1})
${color1}IP address: ${color0}${addr eth0}
#User: ${alignr}$alignc${exec whoami} @ $nodename
${color1}Uptime:${color0} $uptime
#### USAGE #############################################
${color0}$hr
#${color grey}Frequency (in MHz):$color $freq
#${color grey}Frequency (in GHz):$color $freq_g
${color1}RAM Usage:${color0} $mem/$memmax - $memperc% ${membar 4}
${color1}Swap Usage:${color0} $swap/$swapmax - $swapperc% ${swapbar 4}
${color1}CPU Usage:${color0} $cpu% ${cpubar 4}
${color1}Processes:${color0} $processes  ${color1}Running:${color0} $running_processes
#### FILESYSTEM ########################################
${color0}$hr
${color1}File systems:
 /     ${color0}${fs_used /}/${fs_size /} ${fs_bar 6 /}${color1}
 /home ${color0}${fs_used /home}/${fs_size /home} ${fs_bar 6 /home}
#### NETWORKING ########################################
${color0}$hr
${color1}Networking [UP / DOWN]:
#Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
#$color${upspeedgraph eth0 16,180 ffff00 00ff00} ${downspeedgraph eth0 16,180 ffff00 00ff00}
${color0}${upspeedgraph eth0 25,145 00ff00 ff0000 -t} ${downspeedgraph eth0 25,145 00ff00 ff0000 -t}
${color0}${totalup eth0} ${upspeed eth0}${alignr}${color0}${downspeed eth0} ${totaldown eth0}
#### TOP ###############################################
${color0}$hr
${color0}Name              PID   CPU%   MEM%
${color3} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color3} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color3} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color3} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
${color3} ${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}
#### GRAPHICS ##########################################
${color0}$hr
${color1}CPU1 ${color0}${cpugraph cpu1 25,260 00ff00 ff0000 -t}
${color1} ${voffset -25}${cpu cpu1}%
${color1}CPU2 ${color0}${cpugraph cpu2 25,260 00ff00 ff0000 -t}
${color1} ${voffset -25}${cpu cpu2}%
${color1}RAM  ${color0}${memgraph 25,260 00ff00 ff0000 -t}
${color1} ${voffset -25}$memperc%
#${color}${diskiograph sda 16,370 0000ff ff0000}
#DISK ${color}${diskiograph sda 16,270 0000ff ff0000}${alignr}${diskio sda}${color grey}
#DISK ${color}${diskiograph sda 16,270}${alignr}${diskio sda}${color grey}
${color1}DISK ${color}${diskiograph sda 25,260 00ff00 ff0000 -t}${color1}
${color1}${voffset -25}${diskio sda}
#### CALENDAR ##########################################
${color0}$hr
#${font RadioSpace:size=32}${color3}${alignc}${time %l:%M%p}${font}
#${alignc}$color0${time %e} $color1${time %B}
${offset 178}${color2}${font RadioSpace:size=32}${time %k:%M%p}${font}
${alignr}${color1}${time %A}
${alignr}${color0}${time %e} ${color1}${time %B}
#${alignr}${color0}${time %D}
${voffset -70}${font DroidSansMono:size=7.55}${color0}${execpi 30 calOutput=`date +%-d`; cal -h | sed -e 's/\r//g' -e 's/^/ /g' -e '1d' -e 's/\<'"$calOutput"'\>/${color2}&${color0}/'}
${font}${color}
#### RHYTHMBOX #########################################
${color0}$hr
${color1}Rhythmbox: ${color0}${execi 5 rhythmbox-client --no-start --print-playing-format %tt}
#${color1}${color0}${scroll 40 ${exec rhythmbox-client --no-start --print-playing-format %st}}
${color1}${color0} ${execi 5 rhythmbox-client --no-start --print-playing-format %st}
#### CONSOLE ###########################################
${color0}$hr
${color1}${execpi 5 dmesg | tail -n 7}

Otra versión más compacta para pantallas pequeñas (como portátiles)

# Conky configuracion file
# 2013 - Guimi
# http://www.guimi.net
# 
 
#### BASIC CONFIGURATION ###############################
# Overrided by execpi argument
update_interval 2.0
#text_buffer_size 2048
text_buffer_size 512
minimum_size 5 5
no_buffers yes
out_to_console no
out_to_stderr no
use_spacer none
# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes
stippled_borders 0
# background (make it a daemon)
#background no
background yes
 
#### WINDOWS ###########################################
# Usual problems: conky dissapears when minimizing windows
# or when cliking desktop
# that's why I let conky be at taskbar
## Create own window in instead of using desktop?
own_window yes
own_window_transparent yes
#own_window_type normal
# disappears when minimizing
own_window_type window
#own_window_type override
#own_window_type desktop
#own_window_type normal
own_window_class Conky
#own_window_class conky-semi
#own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_hints undecorated,below,sticky,skip_pager
 
#### DATA DISPLAY CONF #################################
# Text alignment, other possible values are commented
alignment top_left
#alignment top_right
#alignment bottom_left
#alignment bottom_right
#alignment none
show_graph_scale no
show_graph_range no
cpu_avg_samples 2
net_avg_samples 2
extra_newline no
uppercase no
## Shorten MiB/GiB to M/G in stats.
short_units yes
# X font when Xft is disabled, you can pick one with program xfontsel
#font 5x7
#font 6x10
#font 7x13
#font 8x13
#font 9x15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*
# Use Xft?
# xft is required to Force UTF8 (see below)
use_xft yes
xftfont DejaVu Sans Mono:size=10
override_utf8_locale yes
 
#### BASIC DISPLAY CONF ################################
maximum_width 300
gap_x 1370
#gap_y 60
gap_y 5
 
border_width 1
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
 
## My colors (suit yourself)
color0 White
color1 LightGrey
color2 Tan1        #FFA54F
color3 Grey
 
##################################### TEXT ##################################
TEXT
#### SYSTEM ############################################
#${scroll 16 $nodename - $sysname $kernel on $machine | }
${color2}$nodename${color1} - $sysname $kernel (${color0}$machine${color1})
${color1}IP address: ${color0}${addr eth0}
#User: ${alignr}$alignc${exec whoami} @ $nodename
${color1}Uptime:${color0} $uptime
#### USAGE #############################################
${color0}$hr
#${color grey}Frequency (in MHz):$color $freq
#${color grey}Frequency (in GHz):$color $freq_g
${color1}RAM Usage:${color0} $mem/$memmax - $memperc% ${membar 4}
${color1}SWAP Usage:${color0} $swap/$swapmax - $swapperc% ${swapbar 4}
${color1}CPU Usage:${color0} $cpu% ${cpubar 4}
${color1}DISK ${color}${diskiograph sda 10,210 00ff00 ff0000 -t}${color1} ${diskio sda}
#${color1}${voffset -25}${diskio sda}
#### NETWORKING ########################################
${color0}$hr
${color1}Networking [UP / DOWN]:
#Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
#$color${upspeedgraph eth0 16,180 ffff00 00ff00} ${downspeedgraph eth0 16,180 ffff00 00ff00}
${color0}${upspeedgraph eth0 20,145 00ff00 ff0000 -t} ${downspeedgraph eth0 20,145 00ff00 ff0000 -t}
${color0}${totalup eth0} ${upspeed eth0}${alignr}${color0}${downspeed eth0} ${totaldown eth0}
#### FILESYSTEM ########################################
${color0}$hr
#${color1}File systems:
FS /   ${color0}${fs_used /}/${fs_size /} ${fs_bar 6 /}${color1}
#### GRAPHICS ##########################################
${color0}$hr
${color1}RAM  ${color0}${memgraph 20,260 00ff00 ff0000 -t}
${color1} ${voffset -20}$memperc%
${color1}CPU  ${color0}${cpugraph cpu0 20,260 00ff00 ff0000 -t}
${color1} ${voffset -20}${cpu cpu0}%
${color1}       1:${color0}${cpu cpu1}%   ${color1}2:${color0}${cpu cpu2}%   ${color1}3:${color0}${cpu cpu3}%   ${color1}4:${color0}${cpu cpu4}%
${color1}Processes:${color0} $processes  ${color1}Running:${color0} $running_processes
#### TOP ###############################################
${color0}$hr
${color0}Name               PID    CPU%   MEM%
${color3} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color3} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color3} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color3} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
${color3} ${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5}
${color3} ${top name 6} ${top pid 6} ${top cpu 6} ${top mem 6}
#### CONSOLE ###########################################
${color0}$hr
${color0}Console
${color1}${execpi 5 dmesg | tail -n 8}
#### CALENDAR ##########################################
${color0}$hr
#${font RadioSpace:size=32}${color3}${alignc}${time %l:%M%p}${font}
#${alignc}$color0${time %e} $color1${time %B}
${offset 178}${color2}${font RadioSpace:size=32}${time %k:%M%p}${font}
${alignr}${color1}${time %A}
${alignr}${color0}${time %e} ${color1}${time %B}
#${alignr}${color0}${time %D}
${voffset -70}${font DroidSansMono:size=7.55}${color0}${execpi 30 calOutput=`date +%-d`; cal -h | sed -e 's/\r//g' -e 's/^/ /g' -e '1d' -e 's/\<'"$calOutput"'\>/${color2}&${color0}/'}
${font}${color}

Elegir entre paquetes alternativos en Debian

Hay distintos programas que pueden cubrir la misma función, por ejemplo editores como nano, ed, vim o emacs, paginadores como more o less, etc.
Una vez instalados los paquetes que deseamos, usando con permisos de administrador update-alternatives se indica al sistema que alternativa utilizar por omisión.

update-alternatives --all

Especialmente interesantes, al menos para mí:

update-alternatives  --config editor
update-alternatives  --config x-www-browser
update-alternatives  --config gnome-www-browser

Gestión de paquetes en Debian

Recordemos que la gestión de paquetes de Debian se basa en la lista de fuentes que hay en:

/etc/apt/sources.list

Además, dependiendo de las acciones a realizar puede ser necesario disponer de permisos de administrador.

Hay programas que ayudan a gestionar los paquetes en modo texto, como:

dselect
tasksel
aptitude

En modo gráfico tenemos:

synaptic
gsynaptic

En modo comando existen muchos (apt-cache, apt-get, dpkg, apt-file…), pero casi todo se puede hacer con aptitude.

Ejemplos para buscar, instalar, desinstalar y eliminar absolutamente un paquete.

$ aptitude search bittorrent
# aptitude install bittorrent
# aptitude remove bittorrent
# aptitude purge bittorrent

Para mantener el sistema actualizado, utilizamos:

# aptitude update && aptitude safe-upgrade -y

A continuación veremos algunas funciones menos utilizadas.

Mostrar información de un paquete

$ aptitude show bittorrent
Paquete: bittorrent                              
Estado: instalado
Instalado automáticamente: sí
Versión: 3.4.2-11.3
Prioridad: opcional
Sección: net
Desarrollador: Michael Janssen 
Tamaño sin comprimir: 602 k
Depende de: python (>= 2.3), python-support (>= 0.90.0), lsb-base (>= 3.0-10)
Recomienda: mime-support
Sugiere: bittorrent-gui
Descripción: Original BitTorent client - console tools
 BitTorrent is a tool for distributing files. It's extremely easy to use - downloads are started by clicking on hyperlinks. Whenever more than one person is downloading at once they send
 pieces of the file(s) to each other, thus relieving the central server's bandwidth burden. Even with many simultaneous downloads, the upload burden on the central server remains quite
 small, since each new downloader introduces new upload capacity. 
 
 This package contains the tools which are used for console-only downloading.  If you want the GUI interface, install the bittorrent-gui package. 
 
 Homepage: http://bitconjurer.org/BitTorrent/

Averiguar a qué paquete pertenece un archivo del sistema.

$ dpkg -S stdio.h
     libc6-dev: /usr/include/stdio.h
     libc6-dev: /usr/include/bits/stdio.h
     perl: /usr/lib/perl/5.6.0/CORE/nostdio.h

Averiguar qué ficheros proporciona un paquete instalado en el sistema.

$ dpkg –listfiles bittorrent

Averiguar qué ficheros proporciona un paquete, esté instalado o no en el sistema.

$ apt-file list bittorrent
bittorrent: /usr/bin/btcompletedir.bittorrent
bittorrent: /usr/bin/btdownloadcurses.bittorrent
bittorrent: /usr/bin/btdownloadheadless.bittorrent
...



Para solucionar problemas ocurridos durante la instalación de paquetes podemos utilizar synaptic (Filtros > rotos) o en modo comando:

dpkg –configure -a
apt-get -f install
aptitude autoclean
aptitude autoremove



Si tras intentar todo lo anterior hay un paquete que no hemos podido instalar y que ya no queremos instalar, pero que el sistema nos dice cada vez que usamos apt-get/aptitude “Se encontraron errores al procesar (paquete)”, editamos

/var/lib/dpkg/status

y borramos la información relativa al paquete.

Para instalar un paquete descargado:

dpkg -i paquete.deb

Para instalar un paquete descargado, con todas sus dependencias:

gdebi paquete.deb


DNIe en Debian GNU/Linux Squeeze 64 bits

Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Squeeze aunque es extensible a otras distribuciones y versiones.

Para instalar el DNIe en sistemas más antiguos.

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.

El DNI electónico o DNIe se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal. Su instalación es, ahora, muy sencilla.

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 Squeeze 64 bits 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

Básicamente vamos a instalar el paquete de la web del dnielectronico.

$ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/Debian_Squeeze_opensc-dnie_1.4.8-2_amd64.deb

Para hacerlos funcionar necesitaremos algunos paquetes:

# aptitude install libopensc2 opensc pinentry-gtk2

 
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“.
Cuando lanzamos este enlace, 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):

# aptitude install pcscd pcsc-tools
$ 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 es necesario reiniciar el navegador.
 
 

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 3.1.2 para GNU/Linux de 64 bits.

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

$ java -jar sinaduraDesktop-3.1.2-unix64-installer.jar

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

Lanzamos el programa desde “Aplicaciones->Otras->Sinadura”.
Para configurarlo vamos a “Aplicaciones -> Preferencias -> Firma -> Certificados“, y elegir “Tarjeta Inteligente“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma -> PDF” 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.
 
 

dnie, dni electrónico, linux, debian, squeeze, C3PO LTC31, miniLector Bit4id, ACS ACR38-U
 

Fuentes tipográficas en Debian GNU/Linux

Como siempre, instalar en Debian es tan sencillo como hacer, por ejemplo:
# aptitude install ttf-unifont fonts-freefont-ttf fonts-linex fonts-vollkorn ttf-mscorefonts-installer
Hay muchísimas disponibles:
$ aptitude search font

Uno de esos pequeños detalles que hacen la vida más cómoda o incómoda al usuario de GNU/Linux, siempre rodeado de Windows, es la compatibilidad de las tipografías.
Se puede instalar facilmente las tipografias típicas de Windows mediante:
# aptitude install ttf-mscorefonts-installer

Si tenemos una partición con Windows (por ejemplo en /media/windows), otra opción es:
# mkdir -p /usr/share/fonts/truetype/win2
# cp /media/windows/windows/Fonts/*.ttf /usr/share/fonts/truetype/win2

Para instalar otras fuentes que no estén en los repositorios, por ejemplo Tahoma, podemos:
- Buscar la fuente en Google usando filetype:ttf+inurl:tahoma y descargarla.
# cp tahoma.ttf /usr/share/fonts/truetype/myfonts/
# dpkg-reconfigure fontconfig

Fuentes, True Type, Font, truetype

DNIe en Debian GNU/Linux Squeeze

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

Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Squeeze.

Para instalar el DNIe en Debian Lenny y en Ubuntu Karmic Koala visitar el siguiente artículo: DNIe en GNU/Linux.

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.

El DNI electónico o DNIe se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal. El problema es que a la hora de hacer los drivers hubo varias chapuzas, problemas con las licencias libres, utilización de librerías incorrectas… Así que para instalarlo en Debian Squeeze hace falta utilizar un poco de magia ;-) Que es un modo más bonito de decir que hay que parchear la instalación para que funcionen los paquetes.

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 Squeeze 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

Básicamente vamos a instalar los paquetes de Debian Lenny en nuestro Squeeze.

$ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Debian_Lenny_32/Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar

Para hacerlos funcionar necesitaremos un par de librerías del repositorio de Lenny:

$ wget http://ftp.es.debian.org/debian/pool/main/libt/libtool/libltdl3_1.5.26-4+lenny1_i386.deb
$ wget http://ftp.es.debian.org/debian/pool/main/o/openct/libopenct1_0.6.14-3_i386.deb

Instalamos los paquetes:

$ tar xvf Debian_Lenny_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
# dpkg -i libltdl3_1.5.26-4+lenny1_i386.deb
# dpkg -i libopenct1_0.6.14-3_i386.deb
# dpkg -i libopensc2_0.11.7-7_i386.deb
# dpkg -i opensc_0.11.7-7_i386.deb
# aptitude install pinentry-gtk2
# dpkg -i opensc-dnie_1.4.6-2_i386.deb
# 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
# aptitude hold libltdl3 libopenct1 libopensc2 opensc opensc-dnie

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

# aptitude install pcscd pcsc-tools
$ 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 es necesario reiniciar el navegador.
 
 

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.
 
 

dnie, dni electrónico, linux, debian, squeeze, C3PO LTC31, miniLector Bit4id, ACS ACR38-U

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

Compilar núcleo a la manera Debian

Comprobamos las versiones de los paquetes necesarios instalados con el script kverif.sh.

# Preparacion

sudo aptitude install linux-source-2.6
sudo aptitude install kernel-package
sudo aptitude install libncurses5-dev
mkdir ~/source
cd ~/source

# Descomprimimos las fuentes

tar xjf /usr/src/linux-source-2.6.17.tar.bz2
cd linux-source-2.6.17/

# Configuramos el kernel

make menuconfig

# Limpiamos el árbol de fuentes y reiniciamos los parámetros de kernel-package

make-kpkg clean

# Compilamos el kernel y generamos el paquete .deb

fakeroot /usr/bin/make-kpkg --revision=custom.1.0 kernel_image

# Instalamos el paquete creado

cd ..
sudo dpkg -i linux-image-2.6.17_custom.1.0_i386.deb

Claves GPG con apt-key

Si al hacer apt-get update aparece el siguiente mensaje:
The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 010908312D230C5F
El sistema no está indicando que necesitamos una nueva llave para poder actualizar los paquetes.
De la clave (números y letras tras ‘NO_PUBKEY’) tomamos los 8 últimos caracteres, en el ejemplo: ’2D230C5F’, e indicamos a gpg que nos baje del servidor de llaves de Debian esa clave:
#gpg –keyserver keyring.debian.org –recv-key 2D230C5F

    gpg: requesting key 2D230C5F from hkp server keyring.debian.org
    gpg: key 2D230C5F: "Debian Archive Automatic Signing Key (2006) < ftpmaster@debian.org>" not changed
    gpg: Total number processed: 1
    gpg:              unchanged: 1

Después exportamos la nueva clave de gpg y la añadimos en apt-key con el siguiente comando:
gpg –armor –export 2D230C5F | apt-key add -

    gpg: no ultimately trusted keys found
    OK

Por último podemos comprobar que la nueva clave es válida:
# apt-key list

    /etc/apt/trusted.gpg
    --------------------
    pub   1024D/4F368D5D 2005-01-31 [expires: 2006-01-31]
    uid                  Debian Archive Automatic Signing Key (2005) <ftpmaster@debian.org >

    pub   1024D/2D230C5F 2006-01-03 [expires: 2007-02-07]
uid Debian Archive Automatic Signing Key (2006) <ftpmaster@debian.org>

Ya podemos volver a hacer apt-get update.