DNIe en Debian Lenny AMD64: Cambio de PIN

Cambio de PIN con PAD Virtual

La página web del DNIe proporciona una aplicación java para cambiar el PIN de nuestro DNIe: PAD Virtual. Conseguir hacer funcionar la versión 1.1 en mi Debian Lenny AMD64 fuen una experiencia interesante.

Descargué el paquete y lo descomprimí. Entré en el directorio creado y ejecuté la aplicación con la orden:

 drimakus@vetonia:$ sh Cambio_de_PIN.sh

Apareció una aplicación gráfica hecha en Java que, ¡oh páramos de soledad...!, dio un error: No se encuentra la librería libjpcsc.so.

Esta librería se halla entre los ficheros descomprimidos del paquete de la aplicación PAD Virtual, dentro del directorio creado. Empecé a estudiar el problema con la orden:

drimakus@vetonia:$ ldd libjpcsc.so
       linux-gate.so.1 => (0xffffe000)
       libpcsclite.so.1 => not found
       libpthread.so.0 => /lib32/libpthread.so.0 (0xf7ee0000)
       libc.so.6 => /lib32/libc.so.6 (0xf7d8e000)
       /lib/ld-linux.so.2 (0xf7f27000)

Hice una búsqueda en Google. Vi que otra persona antes que yo había tenido el mismo problema, pero, al parecer no había dado con la causa.

Empecé a darle vueltas, a "enrear", hasta que me di cuenta del dato más importante: lib32. La aplicación PAD está buscando una librería de 32 bits. ¿Qué paquete Debian la proporciona?:

drimakus@vetonia:$ apt-file find libpcsclite.so
libpcsclite1: /usr/lib/libpcsclite.so.1

Descargué el paquete de 32 bits en cuestión de la página de Debian y lo descomprimí en el directorio /emul/ia32-linux:

drimakus@vetonia:$ wget http://ftp.es.debian.org/debian/pool/main/
     p/pcsc-lite/libpcsclite1_1.4.102-1_i386.deb
drimakus@vetonia:$ sudo dpkg -x libpcsclite1_1.4.102-1_i386.deb
     /emul/ia32-linux
drimakus@vetonia:$ sudo ldconfig

Y ahora, al comprobar la librería libjpcsc.so, cambia la cosa:

drimakus@vetonia:$ ldd libjpcsc.so
       linux-gate.so.1 => (0xffffe000)
       libpcsclite.so.1 => /usr/lib32/libpcsclite.so.1 (0xf7ee9000)
       libpthread.so.0 => /lib32/libpthread.so.0 (0xf7ed2000)
       libc.so.6 => /lib32/libc.so.6 (0xf7d80000)
       libdl.so.2 => /lib32/libdl.so.2 (0xf7d7c000)
       /lib/ld-linux.so.2 (0xf7f22000)

¡BIEN! ¡Pero la aplicación PAD Virtual seguía dando el mismo error! ¿Qué estaba pasando?

Este punto fue el que más me costó resolver. Tardé en darme cuenta de la causa: el ejecutable java empleado. El script Cambio_de_PIN.sh ejecuta la siguiente acción:

export LD_LIBRARY_PATH=.
java -classpath "./DNIeCambioDePIN.jar"
    es.dgp.dnie.kv.client.kvGUI.panels.Main

¿Cómo podemos saber más acerca del ejecutable java empleado por defecto? Con la siguiente orden:

drimakus@vetonia:$ sudo update-alternatives --display java
java - el estado es manual.
 el enlace apunta actualmente a /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
/usr/bin/gij-wrapper-4.1 - prioridad 41
/usr/bin/gij-4.3 - prioridad 43
/usr/lib/jvm/java-gcj/jre/bin/java - prioridad 1042
/usr/lib/jvm/java-1.5.0-sun/jre/bin/java - prioridad 53
 esclavo java.1.gz:
     /usr/lib/jvm/java-1.5.0-sun/jre/man/man1/java.1.gz
/usr/lib/jvm/ia32-java-1.5.0-sun/jre/bin/java - prioridad 53
 esclavo java.1.gz:
     /usr/lib/jvm/ia32-java-1.5.0-sun/jre/man/man1/java.1.gz
Actualmente la "mejor" versión es /usr/lib/jvm/java-gcj/jre/bin/java.

En mi caso tengo instaladas simultáneamente las versiones de 32 y 64 bits del Java de Sun. De todas formas el paquete necesario de 32 bits (o al menos el que me valió a mí) es ia32-sun-java5-bin.

Cambié el ejecutable java con el comando:

drimakus@vetonia:$ sudo update-alternatives --config java
 
Hay 5 alternativas que proveen 'java'.
 
 Selección    Alternativa
-----------------------------------------------
 
         1   /usr/bin/gij-wrapper-4.1
         2   /usr/bin/gij-4.3
 +       3   /usr/lib/jvm/java-gcj/jre/bin/java
*        4   /usr/lib/jvm/java-1.5.0-sun/jre/bin/java
         5   /usr/lib/jvm/ia32-java-1.5.0-sun/jre/bin/java
 
Pulse <Intro> para mantener el valor por omisión [*] o pulse un
     número de selección: 5
Utilizando '/usr/lib/jvm/ia32-java-1.5.0-sun/jre/bin/java'
     para proveer 'java'.

¡Y POR FIN PUDE CAMBIAR EL PIN DE MI DNI-E!

Me falta comprobar si se puede hacer sin cambiar el ejecutable java por defecto del sistema, simplemente especificando el ejecutable en el script:

export LD_LIBRARY_PATH=.
/usr/lib/jvm/ia32-java-1.5.0-sun/jre/bin/java -classpath
     "./DNIeCambioDePIN.jar" es.dgp.dnie.kv.client.kvGUI.panels.Main

Aaaadiós.

ayuda

me puedes ayudar a instalarlo en ubuntu no se como hacerlo un saludo

ayuda

hola tengo ubuntu y cuando trato de instalar el libpcsclite.so.1 me aparece queno encuentra el archivo /emul/ia32-linux me podrias ayudar para instalarlo en ubuntu amd64 un saludo

¿Qué versión de ubuntu tienes?

Hola.
La página de descargas del DNI-e para Linux 64 bits, http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/opensc_..., YA dispone de versiones de 64 bits de los paquetes opensc, libopensc2 y opensc-dnie para Ubuntu Hardy Hero, Intrepid Ibex y para Jaunty Jackalope.
Desinstala lo que hayas instalado y prueba a instalar la versión específica de 64 bits para tu Ubuntu.
Saludos.

Mientras el libjpcsc sea de 32BITS...

Yo tengo las versiones de 64 bits de los paquetes para Ubuntu y sigo sin poder cambiar el PIN porque la bilbioteca libjpcsc.so solo viene en versión de 32BITS (que yo sepa).

Así que al hacer:
$ ldd libjpcsc.so
linux-gate.so.1 => (0xf77b8000)
libpcsclite.so.1 => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7775000)
libc.so.6 => /lib32/libc.so.6 (0xf762f000)
/lib/ld-linux.so.2 (0xf77b9000)

Dice que no encuentra libpcsclite.so.1, pero no es que no esté, sino que es de 64 bits y el la busca de 32... ¿Hay solución a esto?
¿Existe una libjpcsc de 32 bits?

Con Karmic 64bits....

Con karmic de 64bits (amd64) precisamente el problema es que las bibliotecas que mencionas YA son de 64BITS (opensc, libopensc2 y opensc-dnie) instaladas de la web del DNIe, PERO la biblioteca para el cambio de PIN desde Java (libjpcsc) es de 32BITS y el mecanismo descrito aquí para Debian NO vale para Ubuntu. En Karmic existe una biblioteca para JRE que sirve de wrapper de 32bits, pero no se si eso sirve de algo.

Yo nunca he conseguido pasar del ldd que dice que libjpcsc no encuentra a libpcsclite.so.1:

$ ldd libjpcsc.so
linux-gate.so.1 => (0xf77b8000)
libpcsclite.so.1 => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7775000)
libc.so.6 => /lib32/libc.so.6 (0xf762f000)
/lib/ld-linux.so.2 (0xf77b9000)

Y no es que no esté, sino que libjpcsc.so es de 32BITS y libpcsclite.so.1 de 64BITS!!!

Lo suyo (lo más limpio y simple) creo que sería hacerse con un libjpcsc de 64 bits ¿Existe?

PADVirtual en Ubuntu Karmic x64_86

hola,

yo he instalado la versión de 64 bits pero son sólo las librerías de opensc, el PADVirtual es una aplicación java que sólo funciona en modo 32 bts.

en mi caso he tenido que instalar la máquina virtual de java (para 32 bits)

# sudo apt-get install ia32-sun-java6-bin

y la librería libpcslite1 (también para 32 bits), pero en vez de descargar y descomprimir la librería manualmente, he usado getlibs:

# sudo apt-get install getlibs
# sudo getlibs -l libpcsclite.so.1

recomiendo no poner como predeterminada la máquina virtual de java de 32 bits, ya que eso se aplicará a todas las aplicaciones java, es mejor editar el script "Cambio_de_PIN.sh" y cambiar "java" por "/usr/lib/jvm/ia32-java-6-sun/jre/bin/java" (así la aplicación que lo necesita usa esa máquina virtual y no afecta al resto)

un saludo