06 septiembre, 2009

Cómo instalar LTC32 en Debian 64 bits

Después de un tiempo, Fer y yo hemos conseguido hacer funcionar el lector/grabador LTC32 por puerto serie (RS-232) en Debian Sid 64 bits. Hemos tenido que hacer lo siguiente: Esto trata sobre el lector grabador LCT32 por puerto serie de C3PO, ya que los nuevos modelos USB se pueden usar nativamente sin hacer nada. Para empezar, hay que obtener los controladores de la página del fabricante: http://www.c3po.es/downloads/ltc32/drivers/rs232/ltc3x_muscle_20051222.tar.gz Si te lees los archivos y simplemente haces lo que te dicen no funciona, porque el Makefile no hace todo lo que debe. Para empezar, aparece un error de compilación, que se soluciona retocando el archivo ifdhandler.h. La solución es añadir:
#define RESPONSECODE int
Justo antes de la línea «
#include <pcsclite.h>
». El siguiente error es que algunos archivos binarios no se pueden enlazar porque son para 32 bits, pero no para 64.Algo como:
                                                                                                           
ld: i386 architecture of input file `openct/checksum.o' is incompatible with i386:x86-64 output                             
ld: i386 architecture of input file `openct/buffer.o' is incompatible with i386:x86-64 output                               
ld: i386 architecture of input file `openct/proto-t1.o' is incompatible with i386:x86-64 output                             
Este error sale porque lo que nos hemos bajado del fabricamente ya trae unos archivos compilados para 32 bits y el Makefile no limpia ese directorio. Es tan sencillo como borrar los que vienen:
                                                                                                                                                     
rm openct/*.o
y luego ejecutar:
                                                                                                                                                
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/checksum.o openct/checksum.c                                                                                                                    
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/buffer.o openct/buffer.c                                                                                                                        
 cc -g -Wall -fpic --pedantic -I/usr/include/PCSC -I.\
    -c -o openct/proto-t1.o openct/proto-t1.c                                                                                                                    
 
Una vez tenemos esto compilado para 64 bits, ejecutamos el Makefile:
                                                                                                                                                
make
Ya tenemos el controlador para 64 bits.

El acceso al lector de tarjeta se realiza a través de PCSCD, por lo que lo instalamos:
                                                                     
apt-get install pcscd
Ahora, se copia el controlador a su directorio correspondiente par que lo encuentre pscscd:
 
mkdir -p /usr/local/pcsc/drivers/ltc3x/
sudo cp libltc3x.so /usr/local/pcsc/drivers/ltc3x/
A continuación configuramos «pcscd», que es tan sencillo, siempre que no tengáis otros lectores de tarjetas, como:
 
cat libltc3x > /etc/reader.conf
En caso de que tengáis más de un lector, podéis hacerlo con
cat libltc3x >> /etc/reader.conf
y editarlo para ver que está todo correcto.

Después editáis la línea «DEVICENAME» de /etc/reader.conf poniendo el puerto serie al que tengáis conectado el lector. Reiniciamos el servidor:
sudo /etc/init.d/pcscd restart
Si todo ha ido bien, debería encenderse un momento una luz roja y luego apagarse todo.
Si introduces una tarjeta debería encenderse una luz verde fija.

Podemos probar que lee la tarjeta con la orden «pcsc_scan» y al introducir un DNIe debería salir algo como:
 Reader 0: C3PO LTC3x Serial Smart Card Reader 00 00
  Card state: Card inserted,
  ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00

ATR: 3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 38 --> Fi=744, Di=12, 62 cycles/ETU
    64516 bits/s at 4 MHz, fMax for Fi = 8 MHz => 129032 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 44 4E 49 65 20 02 4C 34 01 13
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 38 00 00 00 6A 44 4E 49 65 20 02 4C 34 01 13 03 90 00
3B 7F 38 00 00 00 6A 44 4E 49 65 [1,2]0 02 4C 34 01 13 03 90 00
        DNI electronico (Spanish electronic ID card)
        http://www.dnielectronico.es
Ale, ya somos capaces de leer el DNIe, ahora vamos a hacer que esto nos sea útil.

Para ello, hay que obtener los paquete del DNIe que tiene publicados la FMNT en: http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/opensc_1.4.6_menu64.html Elegís el de Debian (por supuesto :-D): http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Debian_Lenny_64/Debian_Lenny_opensc-dnie_1.4.6-2_amd64.deb.tar Este tar contiene tres paquetes de Debian:
$ tar -xvf Debian_Lenny_opensc-dnie_1.4.6-2_amd64.deb.tar libopensc2_0.11.7-7_amd64.deb opensc-dnie_1.4.6-2_amd64.deb opensc_0.11.7-7_amd64.deb
A pesar de que el único que no está en Debian oficialmente es opensc-dnie_1.4.6-2_amd64.deb, debéis instalar los tres. Esto es porque cambian configuraciones y no se lo han querido currar hasta ese punto. Incluso hay una dependencia más especificada, pero no da problemas.

Es posible que os salga un warning diciendo que cuidado que estáis desactualizando un paquete, no hay problema, es necesario desactualizarlo por lo anterior.
Al instalar estos paquetes aparecerá un mensaje en que dice que una vez instalado, se vaya al menú de aplicaciones, sección de oficina y se ejecute el icono Registar módulo DNIe PKCS#11
Esto abre una página de Iceweasel y salen varias ventanas, seguid las instrucciones. Una vez hecho esto, reiniciamos Iceweasel.

Si todo ha ido según lo esperado, podremos ir a Iceweasel y en Editar-> Preferencias-> Avanzado -> Cifrado -> Ver certificados. Ahí nos pedirá el PIN del DNIe y entonces debería aparecer nuestro nombre.

Para comprobar que todo va bien y que se puede usar en internet podemos usar una página de verificación que proporciona la casa de la moneda. Haciendo click aquí deberías ver toda tu información e incluso firmar un mensaje, aunque esto a mí no me funciona.

Una nota a la hora que autenticarse en páginas es que cuando te sale la ventana de selección de certificado a usar, a mí me aparece preseleccionado el de firma electrónica, con lo que la autenticación no funciona, hay que seleccionar el otro, el de autenticación.

Una vez hecho esto ya podremos hacer mucho más rápidamente gestiones con los ministerios.

Esta entrada ha sido creada con la inestimable ayuda de Fer.