Archive

Archive for the ‘seguridad’ Category

Copias de seguridad en PostgreSQL

January 19th, 2012 Güimi No comments

Si tenemos una base de datos con información importante, es imprescindible hacer copias de seguridad.

Para ello, con postgres, podemos utilizar el siguiente script:

#!/bin/bash
#
# pg_copia.sh
# Por Guimi 2008/11 - http://www.guimi.net
# Basado en un script de http://www.cyberciti.biz/tips/howto-backup-postgresql-databases.html
#

##########################
# PARAMETROS
DIR="/var/lib/postgresql/copias"
LOG="pg_copia.log"

# Vamos al directorio de copias
cd $DIR

# Marcamos el inicio del script en el registro
echo "["`date +%C%y/%m/%d-%X`"] --- Iniciando pg_copia ---" >> $LOG

# Obtenemos la lista de BBDD, excluyendo template0 y template1
LISTA_BBDD=$(psql -l | awk '{ print $1}' | grep -vE '^-|^:|^List|^Name|^Nombre|^\(|template[0|1]')
# Para cada BBDD hacemos un volcado
for BBDD in $LISTA_BBDD
do
  FICHERO_COPIA="$BBDD.sql.gz"
  # Rotamos copias anteriores
  mv $FICHERO_COPIA".004" $FICHERO_COPIA".005" > /dev/null 2>&1
  mv $FICHERO_COPIA".003" $FICHERO_COPIA".004" > /dev/null 2>&1
  mv $FICHERO_COPIA".002" $FICHERO_COPIA".003" > /dev/null 2>&1
  mv $FICHERO_COPIA".001" $FICHERO_COPIA".002" > /dev/null 2>&1
  mv $FICHERO_COPIA $FICHERO_COPIA".001" > /dev/null 2>&1
  # Hacemos la copia
  pg_dump $BBDD | gzip -c > $FICHERO_COPIA
  # Marcamos en el registro la copia
  if [ "$?" -eq 0 ]
  then
    echo "[OK] $BBDD copiada" >> $LOG
  else
    echo "[ERROR $?] $BBDD NO copiada" >> $LOG
  fi
done

#Para restaurar una copia use:
# gunzip $FICHERO_COPIA
# psql -d $BBDD -f $FICHERO_COPIA > dump_$BBDD.log

 
Podemos programar el sistema para que realice copias automáticamente de forma regular mediante crontab -e.

Para restaurar una copia usamos:
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql.gz > dump_miBD.log

De esta manera también podemos “llevarnos” una BDD de un servidor a otro. Primero hacemos la copia de seguridad en el servidor ‘origen’, y después en el servidor ‘destino’ creamos la BD y restauramos la copia:
$ createdb -O mi_usuario miBD
$ gunzip miBD.sql.gz
$ psql -d miBD -f miBD.sql.gz > dump_miBD.log

postgres, copia de seguridad, backup postgres
Categories: BBDD, seguridad

Utilizando el navegador para decodificar base64

December 2nd, 2011 Güimi No comments

Esta nota procede de “Use your browser to decode base64 encoded data” de Cristian Radulescu.

Los navegadores puede decodificar base64, por eso se usa este sistema para “ofuscar” partes de código.
Para “desofuscarlo” basta con preguntarle al propio navegador introduciendo una cadena URI normal.
Así, por ejemplo, podemos poner en la barra del navegador:

data:text/plain;base64,bWVzc2FnZSBlbmNvZGVkIGluIGJhc2U2NA==

Y el navegador nos mostrará:

message encoded in base64
base64
Categories: seguridad

Configuración de ssh

June 21st, 2011 Güimi 2 comments

Configuración segura

Para mayor seguridad cambiamos el puerto, reducimos el tiempo de login y no permitimos conexiones de root
# vi /etc/ssh/sshd_config

Port xxxx
LoginGraceTime 45
PermitRootLogin no

Solo permitimos acceder por ssh a los usuarios indicados en el fichero /etc/loginusers
# vi /etc/pam.d/sshd

#auth       required     pam_env.so # [1]
auth       required     pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers

Creamos el fichero /etc/loginusers con los usuarios autorizados:
# vi /etc/loginusers

guimi

Como usuario (’guimi’ en el ejemplo) generamos las claves dsa y asignamos una passphrase
$ ssh-keygen -t dsa

Para cambiar (o des/asignar) una passphrase
$ ssh-keygen -p -f .ssh/id_dsa
Se recomienda cambiar la passphrase regularmente.

Autorizamos la clave publica
$ cat .ssh/id_dsa.pub > .ssh/authorized_keys
Ajustamos los permisos:
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/*
$ chmod g-w ~/

La clave privada (id_dsa) se tiene que copiar en los clientes de ssh a través de algún medio seguro. Por ejemplo en un lapiz USB, pero NO a través de correo-e normal.

En este momento es posible conectarse desde otra maquina utilizando login y contraseña como siempre ($ ssh usuario@maquina -p xxxx) o usando el fichero de clave privada y conociendo la passphrase ($ ssh usuario@maquina -p xxxx -i id_dsa_copiada).

Para permitir solo el uso de certificados reconfiguramos sshd desautorizando las autentificaciones por contraseña
# vi /etc/ssh/sshd_config

PasswordAuthentication no

Reiniciamos el servicio
# /etc/init.d/ssh restart

Uso de scp

Recordemos que también se puede usar ssh para copiar ficheros de forma segura, tanto para copiar un fichero remoto al cliente:
$ scp -P xxxx -i id_dsa_copiada usuario@maquina:/ruta/fichero .
Como para copiar un fichero local al equipo remoto:
$ scp -P xxxx -i id_dsa_copiada /ruta/fichero usuario@maquina:/ruta/

Túneles SSH

Recordemos que podemos usar SSH para generar túneles seguros. Por ejemplo si queremos conectar a un servicio del equipo en el puerto 5432 (el puerto habitual de PostgreSQL) podemos hacer:
$ ssh usuario@servidor -p xxxx -i id_dsa_copiada -L 5432:localhost:5555
Esto indica que en la máquina cliente, desde la que ejecutamos ssh, el puerto 5555 se dirige al puerto 5432 de la máquina que el servidor de SSH conoce como “localhost”, es decir la máquina servidor.
Así también podríamos hacer un túnel ssh a una máquina vecinas del servidor (-L 5432:vecina:555).
Una vez conectado el túnel, en la máquina cliente (la que lanza el ssh) puedo utilizar un cliente de postgres y decirle que se conecte al puerto local 5555 y en realidad estaré conectando al servidor Postgres remoto de forma segura.

Cliente PuTTY para Windows

Para usar la clave en PuTTY (Windows):

  1. Copiamos la clave al equipo

  2. Usamos PuTTYGen para importar la clave y guardarla como .ppk
    • Conversions->Import key

    • Introducir la passphrase
    • Pulsar “Save private key” y guardarla con extensión .ppk
  3. Al hacer la conexión, en el menú SSH->Auth seleccionamos nuestro fichero .ppk
  4. Si al conectar muestra el error “Key is of wrong type (PuTTY SSH2 private key)“, seleccionar en PuTTY Connections->SSH el protocolo “2″.
SSH, SSL, túnel SSH, openssh-server
Categories: Redes, seguridad

Clave de root MySQL

June 20th, 2011 Güimi No comments

Para poner o cambiar la clave de root de MySQL basta con:
# mysql -u root -D mysql

mysql> update user set password=password('mi_clave') where user='root';
mysql> quit

# /etc/init.d/mysql stop
# /etc/init.d/mysql start

Alternativamente:
# mysqladmin -u root password ‘new-password’
# /etc/init.d/mysql stop
# /etc/init.d/mysql start

Opcional:
# vi /root/.my.cnf

[mysqladmin]
user            = root
password        = mi_clave

# chmod 0600 /root/.my.cnf

clave, root, MySQL

Categories: BBDD, Software Libre, seguridad

DNIe en Debian GNU/Linux Squeeze

June 14th, 2011 Güimi 6 comments

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
3b:f2:98:00:ff:c1:10:31:fe:55:c8:04:12
$ 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

Recuperar fotos borradas

January 11th, 2011 Güimi No comments

Me ha ocurrido ya un par de veces que algún amigo me llama diciendo “he borrado sin querer las fotos de mi cámara ¿puedes hacer algo?”.
Y como la respuesta es sí, aquí dejo los pasos básicos.

Lo primero es no tocar más la tarjeta donde se han borrado las fotos. No probar a hacer nuevas fotos, por ejemplo.
Después introducimos la tarjeta en nuestro lector. Si tenemos en marcha un sistema gráfico lo normal es que automáticamente monte la tarjeta y nos ofrezca ver/importar fotos o algo así.
Averiguamos el dispositivo asignado a la tarjeta:
$ mount

[...]
/dev/sdb1 on /media/KODAK type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=1000)

Otra opción es:
$ dmesg | tail

Instalamos testdisk, una magnífica herramienta de recuperación de datos:
# aptitude install testdisk
y lanzamos ‘photorec’ como superusuario:
# photorec
Este programa nos lleva paso a paso a recuperar fotos, vídeos y demás.
- primero pregunta por el dispositivo desde el que recuperar fotos, en el ejemplo /dev/sdb.
- después pregunta el tipo de tabla de particiones: para las tarjetas de memoria o lápices USB normales “Intel”
- después elegimos la partición (generalmente solo hay una) en el ejemplo “1″
- después pregunta por el tipo de partición que había cuando borramos: generalmente “Other”
- después pregunta si deseamos buscar por toda la partición o solo por el espacio libre: yo recomiendo “Whole”
- por último pregunta en qué directorio queremos recuperar las fotos (NO debe estar en el mismo dispositivo del que estamos recuperando archivos)
con eso photorec empieza a recuperar archivos.

Dependiendo de la capacidad de la tarjeta y de los archivos a recuperar puede invertir más o menos tiempo, pero lo bueno es que va indicando el progreso de trabajo para poder ir viendo cómo va y cuánto le queda.

undelete, recuperar archivos borrados, photorec, testdisk

Wireshark como usuario

March 24th, 2010 Güimi 2 comments

Una herramienta muy potente de análisis de redes es Wireshark (antes conocido como Ethereal).
Sin embargo para poder funcionar necesita acceso de super-usuario (root) a la tarjeta de red.
Esto hace que habitalmente se use haciendo:
$ gksu wireshark

Sin embargo, en realidad, como indican en el blog de wireshark, quien realmente necesita ese acceso es una -en comparación- pequeña libreria: dumpcap.

Así pues para poder utilizar wireshark como usuario normal, basta dar acceso a la libreria dumpcap, como sigue:

## Añadimos el grupo wireshark
# groupadd wireshark
## Hacemos al grupo propietario de dumpcap y le damos permiso
# chgrp wireshark /usr/bin/dumpcap
# chmod 4750 /usr/bin/dumpcap
## Incluimos a nuestro usuario en el grupo
# usermod -a -G wireshark guimi

Wireshark, ethereal

Categories: Redes, seguridad

Tarjeta CardOS M4 en GNU/Linux

February 11th, 2010 Güimi 9 comments

Las tarjetas CardOS M4 son tarjetas criptográficas fabricadas por Siemens y emitidas, entre otros, por la Comunidad Valenciana (a través de la ACCV) y la Junta de Andalucía.

Para utilizarlas hace falta tener un lector de tarjetas instalado, por ejemplo el lector del DNI-e.

Además hace falta tener instalado el controlador de la tarjeta para que el lector sepa trabajar con ella. Y aquí viene el problema, porque el driver que hay tiene restricciones de distribución, además de ser viejo y estar desactualizado.
Al final se puede hacer funcionar con unos pocos pasos… el problema es averiguarlos. Tras mucho buscar, un post de Andalinux me dió las pistas correctas. Este post se debe a aquel (y copia descaradamente algunas partes).

¿Dónde obtener los drivers (sólo binarios) para la tarjeta?
Pues aunque cuesta encontrarlos en Internet (por las restricciones de distribución impuestas por Siemens) hay varias formas de conseguirlos:

  1. En el cdrom de los lectores Omnikey 3121 y 3021.
  2. En la web de la Autoritat de Certificatió de la Comunitat Valenciana.
  3. En el paquete HiPath SIcurity CardOS smart cards API que aparece en los repositorios de Guadalinex.

¿Cómo instalar los drivers?
Yo he utilizado el paquete de Guadalinex, por lo que basta un:

sudo dpkg -i guadalinex-hipath-sicurity-card-api_3.1-2_i386.deb

En teoría ahora bastaría con cargar el módulo en Firefox, pero no os molestéis, no va a funcionar.

¿Y qué tripa se le ha roto al módulo? Preguntemos:

ldd /usr/local/lib/libsiecap11.so
	linux-gate.so.1 =>  (0xb7794000)
	libz.so.1 => /lib/libz.so.1 (0xb76f1000)
	libsiecap15.so => /usr/local/lib/libsiecap15.so (0xb76c8000)
	[...]
	libpcsclite.so.0 => not found
	[...]

¡Ahí está!

Sin embargo tampoco nos basta con instalar esa librería (igual incluso ya está instalada):

sudo aptitude install libpcsclite1

Porque el problema es que el paquete no instala la librería dónde la busca el módulo.
¡Marchando un enlace simbólico!

sudo ln -s /lib/libpcsclite.so.1.0.0 /usr/lib/libpcsclite.so.0

Y ahora sí podemos cargar en Firefox el módulo “/usr/local/lib/libsiecap11.so” que nos leerá la tarjeta.

Para más detalles sobre cómo instalar el módulo en Firefox se puede consultar la instalación del DNI-e.

CardOS M4, Siemens, DNIe

Categories: GNU/Linux, Hardware, seguridad

DNIe en GNU/Linux

July 16th, 2009 Güimi 8 comments

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

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
3b:f2:98:00:ff:c1:10:31:fe:55:c8:04:12
$ 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
Categories: Debian, Hardware, seguridad
Para los artículos:
Creative Commons License 2003-2009 Güimi (http://guimi.net)
Está permitido copiar, distribuir y/o modificar los documentos bajo los términos de la licencia "Reconocimiento-Compartir bajo la misma licencia 3.0 España" de Creative Commons.

Puede ver una copia de esta licencia completa.

Para el código de programación:
General Public License GPL 2 - Copyright (c) 1998-2009 Güimi (http://guimi.net)
Está permitido copiar, distribuir y/o modificar los desarrollos bajo los términos de la licencia "GNU General Public License, Versión 2" de Free Software Fundation.

Puede ver una copia de esta licencia completa.

Reconocimiento tautológico: Todas las marcas pertenecen a sus respectivos propietarios.