17 enero, 2006

Instalar driver Omnikey CardMan 2020 usb

En primer lugar podemos preguntarnos para qué sirve un lector de tarjetas. Estos lectores sirven para leer una tarjeta de firma electrónica.

En mi caso se trata de la firma que expide la ACCV. Esta firma se puede conseguir de manera gratuita en cualquier punto de registro autorizado. Y se puede solicitar en soporte software o en dispositivo seguro. En soporte software se le entrega al usuario en formato de disquete y es gratuito. En dispositivo seguro se entrega en tarjeta criptográfica y cuesta dinero (podéis consultar precios en la misma página del ACCV).

Por razones que no vienen al caso yo soy operador autorizado, y puedo expedir estas firmas digitales. Para ello dispongo de la firma electrónica en soporte de tarjeta y con un lector usb. Si el formato fuese en disquete no habría problemas para hacerla funcionar en linux, pero en formato tarjeta es un poco más laborioso.

En este primer post voy a explicar qué requerimientos hay para hacer funcionar el lector y que se reconozca la tarjeta insertada. En posteriores envíos trataré el tema de utilizar estos certificados desde linux.

Requerimientos

  • Driver Omnikey CardMan 2020: Módulo del kernel para el lector de tarjetas Omnikey CardMan 2020. La última versión es la 2.4.0 y tiene bastante tiempo ya, así que no creo que la actualicen.
  • - PC/SC Smart Card Daemon: Es un middleware que actúa de interfaz entre la tarjeta y las aplicaciones de manejo de los certificados.

Instalación

En primer lugar vamos a instalar pcsc-lite. En mi caso, al trabajar en Debian, se hace con el siguiente comando, si utilizáis otra distribución buscad cómo se instalaría en ella:

# apt-get install pcscd pcsc-tools

Después descomprimimos el archivo descargado del driver del lector y entramos al directorio creado:

# tar xzvf cm2020_installer_v2_4_0_src.tar.gz
# cd cm2020_installer_v2_4_0

Para instalar el módulo hace falta que tengamos los headers de nuestro kernel instalados y ejecutar el script de instalación que trae:

# sh ./install

Installing OMNIKEY Cardman USB Smartcard reader...

Checking, if pcsc-lite (>=1.2.0.) is installed ... found version 1.2.9-beta7. in /usr/sbin/pcscd
./install: line 113: [: 9-beta7: integer expression expected
Version too old!
Installing pcsc-lite to /usr
Preparing build of pcsc-lite ... OK
Building pcsc-lite ...

En mi caso ahí se queda. No quiero que continúe, ya que intenta compilar la versión 1.2.0 y yo tengo instalada la versión 1.2.9-beta7. Y ése el problema, no reconoce 9-beta7 como un número entero (yo tampoco, pero bueno). Mi solución, ha sido la siguiente; como compara con la versión 1.2.0 cualquier cosa que sea 1.2.X cumplirá la condición, así que elimino las referencias posteriores a 1.2:

# vi install

Localizamos la línea 113:

if [ \( \( $pcscd_maj -eq $pcscd_refmaj \) -a \( $pcscd_min -eq $pcscd_refmin \) -a \( $pcscd_fine -ge $pcscd_reffine \) \) -o \( \( $pcscd_maj -eq $pcscd_refmaj \) -a \( $pcscd_min -gt $pcscd_refmin \) \) -o \( $pcscd_maj -gt $pcscd_refmaj \) ]; then

Y eliminamos las referencias a $pcscd_reffine (que vale 0), quedando como resultado:

if [ \( \( $pcscd_maj -eq $pcscd_refmaj \) -a \( $pcscd_min -eq $pcscd_refmin \) \) -o \( \( $pcscd_maj -eq $pcscd_refmaj \) -a \( $pcscd_min -gt $pcscd_refmin \) \) -o \( $pcscd_maj -gt $pcscd_refmaj \) ]; then

Volvemos a ejecutar el script de instalación:

# sh ./install

Installing OMNIKEY Cardman USB Smartcard reader...

Checking, if pcsc-lite (>=1.2.0.) is installed ... found version 1.2.9-beta7. in /usr/sbin/pcscd
OK!
The kernel module for 2.6.12-10-686 isn't prebuilt!
Try to compile it for you!
make -C /lib/modules/2.6.12-10-686/build SUBDIRS=/home/asanchez/Downloads/cm2020_installer_v2_4_0_src/src/cm2020 modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.12-10-686'
  CC [M]  /home/asanchez/Downloads/cm2020_installer_v2_4_0_src/src/cm2020/cardman.o
  Building modules, stage 2.
  MODPOST
  CC      /home/asanchez/Downloads/cm2020_installer_v2_4_0_src/src/cm2020/cardman.mod.o
  LD [M]  /home/asanchez/Downloads/cm2020_installer_v2_4_0_src/src/cm2020/cardman.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.12-10-686'
Copy cardman.ko to /lib/modules/2.6.12-10-686/kernel/drivers/usb/misc
Attempting to start the cm_usb kernel module

Installation finished

Con esto tenemos el módulo instalado, si no lo ha cargado podemos cargarlo nosotros mismos:

# modprobe cardman
# lsmod | grep cardman
cardman                39460  0
usbcore               118044  3 cardman,ohci_hcd

Si insertamos el lector de tarjetas comprobaremos que se carga el driver dinámicamente. Ahora solamente queda reiniciar pcscd y comprobar que coge correctamente el lector:

# /etc/init.d/pcscd restart
Stopping PCSC Lite resource manager: pcscd.
Starting PCSC Lite resource manager: pcscd.
# pcsc_scan
PC/SC device scanner
V 1.4.1 (c) 2001-2004, Ludovic Rousseau 
Compiled with PC/SC lite version: 1.2.9-beta7
Scanning present readers
0: Omnikey CardMan 2020 00 00

Tue Jan 17 17:50:32 2006
 Reader 0 (Omnikey CardMan 2020 00 00)
        Card state: Card removed,

Tue Jan 17 17:50:45 2006
 Reader 0 (Omnikey CardMan 2020 00 00)
        Card state: Card inserted,
        ATR: 3B F2 98 00 FF C1 10 31 FE 55 C8 04 12

ATR: 3B F2 98 00 FF C1 10 31 FE 55 C8 04 12
+ TS = 3B --> Direct Convention
+ T0 = F2, Y(1): 1111, K: 2 (historical bytes)
  TA(1) = 98 --> Fi=512, Di=12, 42.667 cycles/ETU
  TB(1) = 00 --> Programming Param P: 0 Volts, I: 0 milli-Amp\uffffres
  TC(1) = FF --> Extra guard time: 255
  TD(1) = C1 --> Y(i+1) = 1100, Protocol T = 1
-----
  TC(2) = 10 --> Work waiting time: 960 x 16 x (Fi/F)
  TD(2) = 31 --> Y(i+1) = 0011, Protocol T = 1
-----
  TA(3) = FE --> IFSC: 254
  TB(3) = 55 --> Block Waiting Integer: 5 - Character Waiting Integer: 5
+ Historical bytes: C8 04 12

Possibly identified card (using /usr/lib/pcsc/smartcard_list.txt):
3B F2 98 00 FF C1 10 31 FE 55 C8 04 12
        CardOS M4.01a (SLE66CX322P)

Con esto ya tenemos el lector de tarjetas instalado en Linux, próximamente veremos cómo utilizar la tarjeta (y para qué sirve, si no lo sabéis).

Un saludo.

1 comentario:

Anónimo dijo...

Ya era hora de que se pudiera usar en linux....Muy bien por la información.