Hiparco

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

Alojado en http://guimi.net

DNIe en Debian GNU/Linux Stretch (9)

Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Stretch (9) aunque puede aplicar total o parcialmente a otras versiones de GNU/Linux.
Otras versiones: DNIe en GNU/Linux.

Introducción al DNIe

Puedes pasar directamente a la instalación si lo prefieres.

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… Pero el proceso es sencillo una vez lo conoces.

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.

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.

INSTALACIÓN DEL LECTOR Y LA VERSIÓN DE OPENSC PARA EL DNIe


Como administradores instalamos los paquetes del repositorio:

# aptitude install pcscd pcsc-tools pinentry-gtk2 opensc

generamos un enlace que se queda perdido:

# ln -s /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 /usr/lib/

descargamos e instalamos el paquete de DNI-e:

# wget https://www.dnielectronico.es/descargas/distribuciones_linux/libpkcs11-dnie_1.5.0_amd64.deb
# dpkg -i /home/guimi/xxxxx/libpkcs11-dnie_1.5.0_amd64.deb

¡Ya está instalado! Ahora hagamos unas comprobaciones y veamos como configurarlo y usarlo…

Comprobaciones

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:

$ 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
dnie

 

USO Y DISFRUTE

Identificarse en sitios web con 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 y en la pagina de la agencia tributaria podremos hacer todos los trámites de nuestra declaración de la renta.

Primero debemos registrar en Iceweasel/Firefox el módulo de DNIe PKCS#11.
Abrimos el programa, navegamos a “about:preferences#privacy” y pulsamos sobre “Dispositivos de seguridad…“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe OpenSC PKCS#11”, y la ruta del módulo “/usr/lib/libpkcs11-dnietif.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!). Puede ser necesario reiniciar el programa.
Si iniciamos sesión nos pedirá el PIN/Clave.
De nuevo desde “about:preferences#privacy” pulsamos sobre “Ver certificados… -> Importar…” e importamos los certificados del DNI-e:

/usr/share/libpkcs11-dnietif/ac_raiz_dnie.crt
/usr/share/libpkcs11-dnietif/FNMTClase2CA.crt

confiando en ellos para todo.
 

 

Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación de la FNMT.

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ú o sacar el DNIe del lector.
 

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…
Firma digital con Debian GNU/Linux y Sinadura
 

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.
 

dnie, dni electrónico, linux, debian, stretch

Resizing LVMs

I was deploying a VM and I needed more space for /.
So first I turned off the machine and modified the machine.ovf file to increase de size of the hard disk:
From

<Disk ovf:capacity="8589934592" ovf:diskId="vmdisk2" ovf:fileRef="file1"…

To

<Disk ovf:capacity="28589934592" ovf:diskId="vmdisk2" ovf:fileRef="file1"…

Then I started the VM to expand the fs
Initial situation (take a look at /)

root@machine:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-0       7.2G  5.7G  1.2G  84% /
udev             10M     0   10M   0% /dev
tmpfs           403M  5.5M  397M   2% /run
tmpfs          1006M     0 1006M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1006M     0 1006M   0% /sys/fs/cgroup
/dev/sda1       236M   33M  191M  15% /boot

Physical Volumes

root@machine:~# pvs
  PV         VG               Fmt  Attr PSize  PFree
  /dev/sda5  debian-jessie-vg lvm2 a--  26.38g 18.62g

Virtual Groups

root@machine:~# vgs
  VG               #PV #LV #SN Attr   VSize  VFree
  debian-jessie-vg   1   2   0 wz--n- 26.38g 18.62g

Logical Volumes

root@machine:~# lvs
  LV     VG               Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   debian-jessie-vg -wi-ao----   7.39g
  swap_1 debian-jessie-vg -wi-ao---- 376.00m

So I have one PV with 18 free GB (that’s thanks to the machine.ovf modification), one VG and two LVS. The one I want to increase is “root”.
Just a last check:

root@machine:~# pvscan
  PV /dev/sda5   VG debian-jessie-vg   lvm2 [26.38 GiB / 18.62 GiB free]
  Total: 1 [26.38 GiB] / in use: 1 [26.38 GiB] / in no VG: 0 [0   ]
root@machine:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/debian-jessie-vg/root
  LV Name                root
  VG Name                debian-jessie-vg
  LV UUID                OdIAov-a7qm-ThOR-58YP-D7FG-zq5n-r73dUq
  LV Write Access        read/write
  LV Creation host, time debian-jessie, 2015-04-27 10:42:28 +0200
  LV Status              available
  # open                 1
  LV Size                7.39 GiB
  Current LE             1892
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

  --- Logical volume ---
  LV Path                /dev/debian-jessie-vg/swap_1
  LV Name                swap_1
  VG Name                debian-jessie-vg
  LV UUID                dS5vEu-w8LQ-uoZd-IGk8-cmaK-8tBQ-ZtSyvO
  LV Write Access        read/write
  LV Creation host, time debian-jessie, 2015-04-27 10:42:28 +0200
  LV Status              available
  # open                 2
  LV Size                376.00 MiB
  Current LE             94
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

So the path for my LV is /dev/debian-jessie-vg/root

And…

root@machine:~# vgdisplay
  --- Volume group ---
  VG Name               debian-jessie-vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               26.38 GiB
  PE Size               4.00 MiB
  Total PE              6754
  Alloc PE / Size       1986 / 7.76 GiB
  Free  PE / Size       4768 / 18.62 GiB
  VG UUID               V2oYD9-uoYy-sFLY-QSLG-FPyx-Ejce-QANYo4

…I have 4768 Free PE for it! :-)

So, let’s use them. I extend first the LV:

root@machine:~# lvextend -l +4768 /dev/debian-jessie-vg/root
  Size of logical volume debian-jessie-vg/root changed from 7.39 GiB (1892 extents) to 26.02 GiB (6660 extents).
  Logical volume root successfully resized

Then I resize the fs

root@machine:~# resize2fs /dev/debian-jessie-vg/root
resize2fs ... (it does it all automatically)

And that’s all!
Let’s check:

root@machine:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/dm-0        26G  5.7G   19G  24% /
udev             10M     0   10M   0% /dev
tmpfs           403M  5.5M  397M   2% /run
tmpfs          1006M     0 1006M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1006M     0 1006M   0% /sys/fs/cgroup
/dev/sda1       236M   33M  191M  15% /boot
root@machine:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/debian-jessie-vg/root
  LV Name                root
  VG Name                debian-jessie-vg
  LV UUID                OdIAov-a7qm-ThOR-58YP-D7FG-zq5n-r73dUq
  LV Write Access        read/write
  LV Creation host, time debian-jessie, 2015-04-27 10:42:28 +0200
  LV Status              available
  # open                 1
  LV Size                26.02 GiB
  Current LE             6660
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

  --- Logical volume ---
  LV Path                /dev/debian-jessie-vg/swap_1
  LV Name                swap_1
  VG Name                debian-jessie-vg
  LV UUID                dS5vEu-w8LQ-uoZd-IGk8-cmaK-8tBQ-ZtSyvO
  LV Write Access        read/write
  LV Creation host, time debian-jessie, 2015-04-27 10:42:28 +0200
  LV Status              available
  # open                 2
  LV Size                376.00 MiB
  Current LE             94
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

Reconfigurar WiFi en Windows 8

Windows 8 (los dioses confundan a sus creadores) elimina la interfaz gráfica que permitía gestionar las redes WiFi, de manera que si se configura una erróneamente, no se puede editar ni re-crear.

Ante esta situación debemos acudir a la línea de comandos.

Para ello buscamos la consola -> botón derecho -> lanzar como administrador.

Eliminar un perfil:
netsh wlan delete profile name=”ProfileName”

Mostrar todos los perfiles inalámbricos en el equipo:
netsh wlan show profiles

Mostrar una clave de seguridad:
netsh wlan show profile name=”ProfileName” key=clear

Más información:
http://windows.microsoft.com/es-es/windows-8/manage-wireless-network-profiles

Baterías

Para elegir unas baterías adecuadas a nuestro proyecto debemos tener en cuenta varios aspectos:
– Formato y Química
– Características eléctricas (V, mAh, C)

Formato y Química

Las baterías más típicas son las de NiMh (Niquel MetalHidruro), conocidas como “pilas recargables”, por ejemplo:

En este dibujo (realizado con Fritzing) podemos ver un conjunto de 4 baterías AAA, uno de 2 baterías AA y una batería 9V.
Sus principal ventaja es que tienen el formato de las pilas normales y están muy extendidas. Además estas baterías permiten ser re-cargadas sin tener que estar plenamente descargadas, como les ocurría a las anteriores de tipo NiCd (Niquel Cadmio).

Sin embargo hemos de saber es que aunque tienen el formato de las pilas normales (AA, AAA…) no tienen las mismas características.
Por ejemplo una pila AA tiene 1,5V, mientras que una batería del mismo formato (“pila recargable”) tiene 1,2V. Así, curiosamente una batería de 9V tiene 8.4V, ya “9V” es el nombre del formato.

Otro tipo de batería común, más profesionales, son las baterías LiPo (Litio Polímero), que tienen formatos y conectores particulares.

Sus ventajas incluyen un menor peso, mayor capacidad de carga y un rendimiento por descarga más estable a un precio asequible, si bien claramente superior al de las baterías NiMh.

Es importante saber que las baterías LiPo necesitan más cuidados que las normales. Entre otras cosas no deben descargarse más de un cierto voltaje y deben cargarse de forma balanceada. Para ello se venden “chivatos” detectores (lipotesters), y cargadores especiales.

Características eléctricas (V, mAh, C)

– V (voltaje) es el número de voltios que proporciona la batería.
– mAh (miliAmperios/hora) indica la corriente que es capaz de suministrar.
– C (capacidad de descarga) indica la velocidad a la que se puede descargar de forma segura la batería.

Así una batería de 3600 mAh puede proporcionar teóricamente 1 mA por segundo. Si nuestra batería tiene una capacidad 10C (máximo habitual de las baterías NiMh), podría descargar 10 mA por segundo, durando 10 veces menos tiempo.

Simplificando mucho podemos decir que el voltaje nos indica la potencia y los mAh*C nos indica el tiempo que nos va a durar la batería.

Importante: Recordemos que no debemos exceder el V máximo de ningún componente, ya que de lo contraría acabaríamos quemándolo.

Si consultamos las características técnicas de las baterías NiMh, los datos habituales son entorno a:

V mAh
Pila AA 1.5 2800
Batería NiMh AA 1.2 2400
Pila AAA 1.2 1150
Batería NiMh AAA 1.2 950
Pila 9V 9 400
Batería NiMh 9V 8.4 350

Obviamente, se pueden encontrar baterías con diferentes características, como por ejemplo baterías NiMh de 9V de 450 mAh o más.

Conexión de baterías

Podemos unir varias baterías en serie -sumando su voltaje- o en paralelo -sumando su “capacidad”- (las baterías deben ser iguales). Lo más habitual es conectarlas en serie como en este dibujo:

A la izquierda vemos cuatro baterías AAA conectadas en serie (el positivo de una, conectado al negativo de la otra), proporcionando 4,8V (1,2Vx4).
En el centro vemos 2 baterías AA conectadas en serie. Esta configuración con pilas normales de 1,5V nos daría 3V, mientras que con baterías NiMh de 1,2V nos proporcionaría 2,4V.

 

Grabar el escritorio GNU/Linux

Para grabar el escritorio en GNU/Linux podemos utiliza ffmpeg. Vamos a ver un par de ejemplos.

Grabar el escritorio completo (1680×1050):
ffmpeg -f x11grab -s 1680×1050 -r 25 -i :0.0 -sameq output.mkv
Grabar una parte del escritorio (tamaño 1000×500, offset 100,100):
ffmpeg -f x11grab -s 1000×500 -r 25 -i :0.0+100,100 -sameq output.mkv

También se puede indicar a ffmpeg que grabe una zona que siga al ratón y varios parámetros más. Como siempre:
man ffmpeg

Otros programas que se pueden usar para capturar el escritorio son VLC, gtk-recordmydesktop, recordmydesktop.

Relacionado: Retocar videos
También recomiendo OpenShot para editar videos de forma gráfica.

Arduino: Módulo Bluetooth

En esta entrada configuraremos un módulo Bluetooth para comunicar nuestro Arduino. El objetivo es poder controlar nuestros proyectos desde un teléfono móvil u otro dispositivo similar con Bluetooth.

Para ello vamos a utilizar un módulo Bluetooth HC-05 (también sirve el HC-06) que es muy común y económico (unos 4€). La diferencia entre ambos módulos es que el HC-05 que puede ser maestro o esclavo (master/slave), mientras que el HC-06 solo puede actuar como esclavo (slave).

Continue reading

Un robot con Arduino por menos de 70 euros

Hace unos días participé en el Olympic Robotic Challenge 2.14 con mi primer robot, basado en Arduino, y con un coste inferior a 70 euros y un peso de unos 320 gramos.
El robot quedó tercero en la prueba de velocidad (sigue-lineas).

Hay un monton de información de robots económicos realizados con Arduino.
Si quieres puedes ver cómo hice el mio paso a paso, incluyendo la lista de componentes y el programa final en: Un robot con Arduino