05 abril, 2006

Uso práctico de certificado digital

En anteriores entradas expliqué cómo instalar el driver del lector de tarjetas Omnikey Cardman 2020 y cómo utilizar la tarjeta criptográfica en Gnu/Linux.

Ahora voy a comentar un uso práctico del certificado digital de ACCV.

Para hacer que funcionase el lector y la tarjeta criptográfica tuve que pelearme(1) bastante (y todavía me estoy peleando) con los respectivos fabricantes, o mejor dicho, con sus representantes. Pero hoy me he visto recompensado, al menos en parte.

Hoy he realizado la declaración de la renta a través de la página de la AEAT al efecto: Campaña Renta y Patrimonio 2005. El proceso ha sido sencillo, al menos en la parte técnica, para la parte teórica de rellenar el formulario he necesitado la ayuda de mi compañera de curro (¡Gracias Mª José!). Simplemente se accede a la página, se introduce el NIF y se elige identificarse con Certificado de Usuario. El navegador te pregunta (si lo tienes configurado así) por el certificado que deseas utilizar para firmar y accedes a tus datos. Así de simple.

En la página de la campaña tienes acceso, mediante el mismo certificado, a tus datos fiscales, a la solicitud/modificación del borrador de tu declaración, a la posterior presentación... Es decir, cuando sabes qué y dónde ponerlo apenas tardas 5 minutos en hacer la declaración. Y sin moverte de casa.

Ahora solamente me queda aclarar, a quien no haya leído los posts anteriores, que el certificado se puede obtener en formato disquete de forma gratuita. Solamente hay que personarse en un PRU con el DNI y una fotocopia de éste, y te lo entregarán en el momento.

Para quien tenga curiosidad por las aplicaciones del certificado digital emitido por la ACCV, en su página oficial tiene una Lista de Aplicaciones y Servicios con Firma Electrónica.

(1)Pelearme en el buen sentido de la palabra, ya que se mostraron muy interesados en ayudarme desde un primer momento. El problema viene con versiones (kernel, driver, librerías, ...) en sucesivas actualizaciones. De momento no consigo que funcione bien el lector en el kernel 2.6.15, aunque con el 2.6.12 funciona de maravilla. Y con diálogo con los desarrolladores del driver incluído. Volver.

4 comentarios:

Anónimo dijo...

Simplemente decir que el lector de tarjetas ya funciona perfectamente con el kernel 2.6.15 y todo esto porque se lo ha currado.

Vradick dijo...

Es cierto, ya funciona en el kernel 2.6.15, aunque para ello he tenido que parchear el módulo.

El problema es que no tengo tiempo para detallar los cambios que he hecho en el código fuente y postearlo. Lo dejo pendiente para próximos posts.

Rawsock dijo...

Cutre Patch Mode On !

Fichero : cardman.c

Comentad o eliminad la linea 168. Al parecer el campo "mode" en el struct usb_class_driver ya no aparece en 2.6.16

Lo mismo pasa con la línea 175. Comentadla o eliminadla. Sin embargo, hay campos de struct usb_driver que el driver no parece inicializar, "suspend" y "resume" son los mas flagrantes ... quizas directamente el dispositivo ni soporte susp/res.

Vradick dijo...

Aquí posteo el diff del archivo cardman.c:

~$ diff cm2020_installer_v2_4_1_src/src/cm2020/cardman.c cm2020_installer_v2_4_1_src-parcheado/src/cm2020/cardman.c
177,178c177,178
< #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
< .owner= THIS_MODULE,
---
> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
> .owner= THIS_MODULE,
249,251c249,258
< DEBUG(3, "-> usb_unlink_urb(urb=%p)\n", urb);
< i=usb_unlink_urb(urb);
< DEBUG(3, "<- usb_unlink_urb(urb=%p rc=%d)\n",urb,i);
---
> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,8)
> DEBUG(3, "-> usb_kill_urb(urb=%p)\n", urb);
> usb_kill_urb(urb);
> i=-1;
> DEBUG(3, "<- usb_kill_urb(urb=%p rc=%d)\n",urb,i);
> #else
> DEBUG(3, "-> usb_unlink_urb(urb=%p)\n", urb);
> i=usb_unlink_urb(urb);
> DEBUG(3, "<- usb_unlink_urb(urb=%p rc=%d)\n",urb,i);
> #endif
1781c1788
< else rc=verify_area(VERIFY_WRITE,(void *)arg,size);
---
> else rc=(access_ok(VERIFY_WRITE,(void *)arg,size)) ? 0 : -EFAULT;
1786c1793
< else rc=verify_area(VERIFY_READ,(void *)arg,size);
---
> else rc=(access_ok(VERIFY_READ,(void *)arg,size)) ? 0 : -EFAULT;