# [mini-cómo] Instalación del DNIe en Gentoo

## pcmaster

Como todos sabéis, el nuevo DNI electrónico o DNIe incorpora un chip que permite autenticación electrónica en páginas web, firma digital, etc. Aquí os dejo el manual para instalar los programas necesarios a través de portage.

El chip del DNIe le permite funcionar con cualquier lector de tarjetas smartcard. Por tanto, podremos utilizar cualquier lector de smartcard compatible con Linux. En principio, debería serlo cualquier lector que use el controlador estándar CCID. Además, se deben instalar los controladores de la tarjeta, en este caso los del DNIe, que sólo se distribuyen en formato binario.

1- Instalación del lector smartcard.

En mi caso, he utilizado un lector Cherry ST1210, aunque puede servir cualquier otro. En el caso del Cherry, hace falta instalar el paquete CCID y su dependencia pcsc-lite. En este caso las versiones instaladas son las más actuales estables en portage: ccid-1.3.10 y pcsc-lite-1.5.3. pcsc-lite lo instalaremos haciendo uso de la USE=hal, que ya activa por defecto:

```
# emerge -pv pcsc-lite ccid

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] sys-apps/pcsc-lite-1.5.3  USE="hal -static -usb" 0 kB

[ebuild   R   ] app-crypt/ccid-1.3.10  USE="-nousb -twinserial" 0 kB

Total: 2 packages (2 reinstalls), Size of downloads: 0 kB
```

A continuación debemos ejecutar el demonio de pcscd, que podemos también poner en el runlevel default para que se inicie automáticamente al arrancar el sistema:

# /etc/init.d/pcscd start

# rc-update add pcscd default

Con esto, el sistema ya debería reconocer el lector. Una forma rápida de saber si ha sido reconocido es, desde las X, usar el programa usbview: el nombre de los dispositivos que no tienen el correspondiente controlador cargado aparece en rojo. Si todo está correcto aparecerá en negro.

Controlador no cargado: http://yfrog.com/0xlectorkoj --- Controlador cargado: http://yfrog.com/9flectorokj

2- Instalación del controlador para la tarjeta del DNIe

Nuevo ebuild versión 1.4.6-r1 en https://forums.gentoo.org/viewtopic-p-6329306.html#6329306 que funciona con la versión actual de opensc.

Lo primero que hemos de hacer es poner en el overlay del portage (que crearemos si no lo hemos hecho ya) el ebuild, que pondremos en /usr/local/portage/dev-libs/opensc-dnie/opensc-dnie-1.4.7.ebuild:

```
# Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="Controlador opensc para el DNI electrónico"

HOMEPAGE="www.dnie.es"

SITE="http://www.dnie.es/descargas/PKCS11_para_Sistemas_Unix"

SRC_URI="x86? ( ${SITE}/1.4.7.Ubuntu_Karmic_32/Ubuntu_Karmic_${PN}_1.4.7-2_i386.tar )

amd64? ( ${SITE}/1.4.7.Ubuntu_Karmic_64/Ubuntu_Karmic_${PN}_1.4.7-2_amd64.tar ) "

LICENSE="DGP"

SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE=""

DEPEND="=dev-libs/opensc-0.11.8

      sys-devel/binutils

      app-arch/tar"

RDEPEND="dev-lang/perl

      =dev-libs/opensc-0.11.8"

src_install() {

   if use amd64; then

      ARQ="_amd64"

   else

      ARQ="_i386"

   fi

   ar -x ${PN}_1.4.7-1${ARQ}.deb || die "Extract failed"

   cd ${D}

   tar xvzf ${WORKDIR}/data.tar.gz || die "Install failed"

}

pkg_postinst() {

   grep dnie /etc/opensc.conf >${T}/odc

   if ( ! test -s ${T}/odc ); then

      patch -b /etc/opensc.conf ${FILESDIR}/opensc-dnie.conf.patch

   fi

}

pkg_postrm() {

   if ( test -e /etc/opensc.conf.orig ); then

      rm /etc/opensc.conf

      mv /etc/opensc.conf.orig /etc/opensc.conf

   fi

}
```

O para la versión anterior 1.4.6:

```
# Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="Controlador opensc para el DNI electrónico"

HOMEPAGE="www.dnie.es"

SRC_URI="x86? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_i386.deb.tar )

amd64? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_amd64.deb.tar ) "

LICENSE="DGP"

SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE=""

DEPEND="=dev-libs/opensc-0.11.7

      sys-devel/binutils

      app-arch/tar"

RDEPEND="dev-lang/perl

      =dev-libs/opensc-0.11.7"

src_install() {

   if use amd64; then

      ARQ="_amd64"

   else

      ARQ="_i386"

   fi

   ar -x ${PN}_1.4.6-2${ARQ}.deb || die "Extract failed"

   cd ${D}

   tar xvzf ${WORKDIR}/data.tar.gz || die "Install failed"

}

pkg_postinst() {

    grep dnie /etc/opensc.conf >${T}/odc

    if ( ! test -s ${T}/odc ); then

        patch -b /etc/opensc.conf ${FILESDIR}/opensc-dnie.conf.patch

    fi

}

pkg_postrm() {

    if ( test -e /etc/opensc.conf.orig ); then

        rm /etc/opensc.conf

        mv /etc/opensc.conf.orig /etc/opensc.conf

    fi

}
```

También pondremos en /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie.conf.patch el siguiente archivo:

```
49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

> 

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libopensc-dnie.so;

>    }
```

A continuación haremos un emerge de opensc-dnie, que instalará como dependencia el paquete opensc-0.11.7 u opensc-0.11.8, dependiendo si estamos instalando la versión 1.4.6 o la nueva 1.4.7. Es importante no actualizar opensc a una versión posterior porque no funcionará. En ese caso firefox nos muestra en la consola un mensaje de error al iniciar el navegador: 

[opensc-pkcs11] ctx.c:362:load_dynamic_driver: dynamic library '/usr/lib/libopensc-dnie.so': invalid module version

[opensc-pkcs11] ctx.c:462:load_card_drivers: Unable to load 'dnie'.

Nota: La versión 1.4.6-r1 utiliza un wrapper que lo hace compatible con cualquier versión de opensc-0.11.x

Podemos bajar la versión correcta de opensc de los siguientes enlaces:

0.11.7: http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/opensc/opensc-0.11.7.ebuild

0.11.8: http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/opensc/opensc-0.11.8.ebuild

Además debemos asegurarnos de que opensc se instala con la USE pcsc-lite, ya que de lo contrario no podrá comunicarse con nuestro lector smartcard.

Una vez instalado, en el menú Oficina de nuestro entorno X (xfce, kde, o el que sea) encontraremos un enlace para registrar el módulo PKCS#11 del DNIe en Firefox. Tras ejecutarlo, se abrirá Firefox y nos pedirá permiso para instalar el módulo de seguridad. Tras hacerlo, cerramos Firefox y se volverá abrir. En teoría, al hacerlo debería instalar el certificado raíz de la Dirección General de Policía, que se usará para validar los DNIe. Digo en teoría, porque en Firefox 3.0.11 no funciona, y deberemos instalarlo manualmente.

Para instalar el certificado raíz de la DGP manualmente, abrimos en Firefox el menú Editar -> Preferencias. Pulsamos en el icono Avanzado y en la pestaña Cifrado pulsamos el botón Ver certificados. En la ventana que sale nos vamos a la pestaña Autoridades, pulsamos el botón Importar e importamos el certificado raíz de la DGP que se encuentra en /usr/share/opensc-dnie/ac_raiz_dnie.crt. En la ventana que aparece marcaremos las 3 casillas y aceptamos.

En Firefox 3.5 es necesario añadir manualmente el dispositivo, ya que no se instala automáticamente. Para ello seguiremos los siguientes pasos:

1. En el menú Editar elegir la opción Preferencias

2. Seleccionar el icono Avanzado

3. En la pestaña Cifrado pulsar el botón Dispositivos de seguridad. Se mostrará la ventana del Administrador de dispositivos

4. Pulsar el botón Cargar

5. Introducir los datos del módulo:

* En Nombre del módulo escribir un nombre para el módulo (por ejemplo, DNIe)

* En Archivo del módulo escribir: /usr/lib/opensc-pkcs11.so6. Pulsar el botón Aceptar para añadir el módulo.

7. En el administrador de dispositivos, pulsar de nuevo Aceptar.

8. Ya se puede cerrar la ventana de Preferencias.

3- Comprobación de la instalación:

La primera cosa a comprobar sería que el lector smartcard está correctamente reconocido por el sistema. Eso ya lo hemos hecho en el primer paso, al comprobar mediante usbview si el dispositivo salía en negro o rojo.

En segundo lugar, en el administrador de dispositivos de Firefox (la ventana a la que accedemos mediante el botón dispositivos de seguridad) en la lista de módulos de seguridad y dispositivos saldrá uno llamado DNIe que contendrá muchas entradas Virtual slot. Si tenemos conectado el lector smartcard, las 4 primeras aparecerán con el nombre del lector (en el caso del Cherry son 4, no sé si con otros lectores el número puede variar). Si con el lector conectado ninguno de los Virtual slot aparece renombrado con el nombre del lector, una causa posible puede ser que opensc se haya compilado sin el use pcsc-lite. Al introducir un DNIe en el lector, la primera de dichas entradas muestra que está introducido el DNIe.

Sin DNIe insertado: http://yfrog.com/elsindniej --- Con DNIe insertado: http://yfrog.com/5wcondniej

Por último hacemos una visita a la página http://www.dnie.es y al final de la página a la que accedemos pulsando en CÓMO UTILIZAR EL DNIE -> Verificar que funciona encontraremos un enlace para verificar su funcionamiento.

En la misma página, accediendo al enlace descargas -> Sistemas GNU/Linux y Sistemas MacOS podemos encontrar un enlace con el programa para cambiar el pin.

Notas:

1- No estoy seguro de si el ebuild está hecho de la mejor forma posible o no. Casi seguro que será mejorable, pero al menos lo he probado y consigue instalar correctamente el programa del DNIe tanto en x86 como en amd64. Cualquier sugerencia o mejora al ebuild será bienvenida.

2- En el paquete .deb hay un script que permite modificar el archivo /etc/opensc.conf al instalar opensc-dnie y dejarlo como estaba tras la desinstalación. Pero tras echarle un vistazo veo que usa cosas de Debian y por tanto no estoy seguro si funcionaría en Gentoo, por lo que he hecho un simple apaño en la funcion pkg_postinst del ebuild que simplemente modifica una sola vez dicho archivo, y no vuelve a hacerlo si se reinstala opensc-dnie si ya hace referencia al mismo.

---Actualizaciones---

21/07/2009 -> Cambio en el ebuild para recuperar el archivo /etc/opensc.conf original si se desinstala opensc-dnie

02/08/2009 -> Eliminada versión 0.11.7 de opensc en el portage, por un bug de seguridad. Puede bajarse el ebuild de http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/opensc/opensc-0.11.7.ebuild y ponerlo en el overlay del portage. Espero que salga una nueva versión del controlador para el DNIe que solucione el problema.

20/02/2010: Añadido ebuild para la nueva versión 1.4.7 (usando paquetes de Ubuntu Karmic Koala) que depende de opensc-0.11.8 en vez de opensc-0.11.7. Algo es algo (esta version ha resuelto un importante bug de seguridad) aunque sigue siendo muy antigua y ya no está en portage, aunque podemos descargar el ebuild desde este enlace: http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/opensc/opensc-0.11.8.ebuild

24/06/2010: Nuevo ebuild para la versión 1.4.6, que lo instala con un wrapper que le permite funcionar sobre cualquier versión de opensc-0.11.*: https://forums.gentoo.org/viewtopic-p-6329306.html#6329306

----------

## darkevil

Hola,

hace un tiempo instalé el lector ltc31 con un pequeño manual que encontré en Kriptopolis,  http://www.kriptopolis.org/dni-electronico-en-gentoo, pero, cuando insertaba el DNIe y la clave el firefox se me cerraba. Lo intenté con konqueror pero ocurria lo mismo.

El lector lo reconocía y los certificados estaban instalados ya que me pedía el pin cuando metía el dni.

No lo tengo a mano ahora mismo el lector, la semana que viene probaré a ver que tal.

Saludos.

----------

## pcmaster

La guía de kriptópolis hable de una versión más antigua del programa para el DNIe. Yo he hecho el ebuild para la última.

Una cosa: tras la instalación, revdep-rebuild falla porque un archivo del dnie necesita el paquete openct.

Pero openct hace lo mismo que ccid + pcsc-lite, así que en un principio no es necesario instalarlo. Es más, en algún foro dedicado a Ubuntu, cuando buscaba información opara hacer el ebuild, leí que si se instalaba openct podía ocurrir que dicho programa tomase el control del lector, y éste dejara de funcionar con ccid + pcsc-lite, si es el driver configurado para el DNIe.

Actualizo: si se instala openct con el use pcsc-lite, efectivamente al iniciarlo con /etc/init.d/openct start el lector deja de ser reconocido al conectarlo al USB. por algún motivo, el Cherry-ST-1210 funciona con el driver ccid con sólo instalarlo, pero no con el driver ccid de openct. Si alguien consigue configurarlo que diga cómo, así ya que hay que instalar openct podría prescindirse de ccid.

En fecha 29 de julio ha sido eliminada la versión 0.11.7 de opensc dejando como estable solamente la última 0.11.8. Dado que sólo conseguí instalarlo con la 0.11.7, he puesto un bug para que la re-añadan: https://bugs.gentoo.org/show_bug.cgi?id=280018

EDITO: En apenas unos minutos han cerrado el bug. La versión 0.11.7 no será vuelta a poner en el portage por un fallo de seguridad documentado en el bug 269920. En la respuesta dan como solución instalarlo en un overlay local (puede bajarse de http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/dev-libs/opensc/opensc-0.11.7.ebuild)

----------

## pcmaster

Actualización: En Firefox 3.5 es necesario añadir manualmente el dispositivo:

1. En el menú Editar elegir la opción Preferencias

2. Seleccionar el icono Avanzado

3. En la pestaña Cifrado pulsar el botón Dispositivos de seguridad. Se mostrará la ventana del Administrador de dispositivos

4. Pulsar el botón Cargar

5. Introducir los datos del módulo:* En Nombre del módulo escribir un nombre para el módulo (por ejemplo, DNIe)

* En Archivo del módulo escribir: /usr/lib/opensc-pkcs11.so6. Pulsar el botón Aceptar para añadir el módulo.

7. En el administrador de dispositivos, pulsar de nuevo Aceptar.

8. Ya se puede cerrar la ventana de Preferencias.

----------

## mimosinnet

Excelente post! Me ha funcionado perferctamente!

He tenido que cambiar el fichero /etc/opensc.conf tal y como señalas en el post DNI electrónico en Gentoo en la web de kriptopolis.

También, he tenido que salir y volver a entrar a firefox con el DNI en el lector.

Mil gracias!

----------

## pcmaster

¿Has modificado el archivo opensc.conf manualmente como pone en la web de kiptópolis?

No es que no haya que modificarlo, sino que mi ebuid ya lo hace. Mira a ver si te has olvidado de poner el archivo opensc-dnie.conf.patch en /usr/local/portage/dev-libs/opensc-dnie/files/

----------

## mimosinnet

 *pcmaster wrote:*   

> Mira a ver si te has olvidado de poner el archivo opensc-dnie.conf.patch

 

Pues sí que tenía el archivo. 

```
# ls /usr/local/portage/dev-libs/opensc-dnie/files/

opensc-dnie.conf.patch
```

Igual es que había instalado antes el dev-libs/opensc-0.11.11 e instalado después la versión 0.11.7.

He estado mirando cómo usar el programa de cambio de contraseña:

 *Quote:*   

> $ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/PADVirtual_v1_2.tar
> 
> $ tar -xf PADVirtual_v1_2.tar
> 
> $ export LD_LIBRARY_PATH=.
> ...

 

Abrazos!

---

Por cierto, que vivimos bien cerca: http://www.gentoo-users.org/user/mimosinnet/

----------

## pcmaster

Sí, claro, al reinstalar opensc se re-escribe el archivo .conf. pero con reinstalar el programa del dnie se soluciona.

Por cierto, ya podrían los autores del programa actualizarlo para que funcione con versiones más modernas de opensc.

----------

## cameta

Mientras vayan con binarios habra este problema.

----------

## pcmaster

Sí, es cierto, aunque podrían al menos hacerlo al estilo que usan nvidia y ati en sus drivers binarios, que vienen en formato objeto, y al "compilarlos" lo que hace es enlazarlos para que funcionen con la versión del kernel que tengas instalada.

----------

## cameta

De todas maneras en muchas webs que usan el DNI-e se emplean también controles Active X

y me parece que eso no hay manera de hacerlo funcionar en linux. Corrigeme si me equivoco.

----------

## pcmaster

Bueno, supongo que eso depende de la web. Si existe software para linux es porque es posible utilizarlo. Pero lo de los controles ActiveX pueden llevarlos tantto si usan el dnie como si no.

----------

## cameta

En el tesoro público www.tesoro.es con la firma electrónica puedo acceder a mis inversiones, pero no puedo firmar para suscribir o renovar (y tengo que usar un windows)  :Crying or Very sad: 

pirata evidentemente.

----------

## mimosinnet

Por si a alguien le ocurre lo mismo:

Descargué el dispositivo de seguridad en el firefox (el que aparece cuando agregamos /usr/lib/opensc-pkcs11.so) y para volver a cargarlo he tenido que reinstalar el ebuild opensc-dnie.

Abrazos!

Edición: Añadido

Una cosa más: cuando se desconecta el lector el archivo .xsession-erros empieza a llenarse con estos mensajes:

```
[opensc-pkcs11] reader-pcsc.c:877:pcsc_detect_readers: SCardListReaders failed: 0x8010002e

[opensc-pkcs11] reader-pcsc.c:996:pcsc_detect_readers: returning with: No readers found
```

Abrazos!

----------

## pcmaster

Añadido ebuild para la versión 1.4.7 usando el paquete de Ubuntu Karmic Koala. Utiliza la versión 0.11.8 de opensc en lugar de la 0.11.7.

----------

## pcmaster

¡¡¡AL FIN!!! ¡¡¡ALELUYA!!!

Leo en Kriptópolis que la DGP ha publicado el código fuente del pkcs11 del DNIe.

http://www.kriptopolis.org/disponibles-fuentes-pkcs11

Aunque como no podía ser perfecto, el archivo se llama simplemente src.zip. Nada de poner números de versión ni nada de eso en el nombre del archivo... ¿Tanto les cuesta hacerlo bien? ¿O quizá es que no tienen intención de sacar actualizaciones?

En cuanto pueda me pongo a ver si saco el ebuild, que estos días estoy muy liadillo.

---Edito---

Esto... bueno, parece que según lo que pone en Kriptópolis, el paquete no se puede copilar tal cual, parece que hay que integrarlo en opensc. Tendré que investigarlo un poco... de todas formas, parece que el final de los problemas está más cerca.

----------

## mimosinnet

Me he cambiado de ordenador y he seguido otra vez esta excelente guía para usar el DNIe en gentoo, esta vez con otro lector:

```
# lsusb | grep O2

Bus 004 Device 003: ID 0b97:7772 O2 Micro, Inc. OZ776 CCID Smartcard Reader

Bus 004 Device 002: ID 0b97:7761 O2 Micro, Inc. Oz776 1.1 Hub
```

En algún momento no he hecho bien algún paso, y para hacer un debug me han servido las siguientes instrucciones:

```
opensc-tool -l

pkcs11-tool -I

pcsc_scan
```

También muy útil iniciar pscsd en modo debug:

```
pcscd -d -f
```

Por otra parte, al usar x86_64, he tenido que cambiar lo siguiente en el fichero opensc.conf:

```
card_driver dnie {

#The location of the driver library

# module = /usr/local/lib/libopensc-dnie.so;

module = /usr/lib64/libopensc-dnie.so; 

}
```

Felitar una vez más pcmaster con el howto y animarle con el código del del pkcs11!

Abrazos!

----------

## pcmaster

Gracias  :Very Happy: 

Lo del archivo opensc.conf puede ser debido a que no tengas el enlace lib->lib64 en /usr:

```
$ ls /usr -l

total 269

drwxr-xr-x   2 root    root     74008 jun 18 19:22 bin

drwxr-xr-x   6 root    root       144 mar  3 18:54 brlcad

drwxr-xr-x   4 games   root        96 dic 26  2008 games

drwxr-xr-x 296 root    root     39424 jun 18 19:22 include

drwxr-xr-x   3 root    root        72 jun  1  2008 kde

lrwxrwxrwx   1 root    root         5 may 25  2008 lib -> lib64

drwxr-xr-x  31 root    root     27976 jun  6 13:31 lib32

drwxr-xr-x 130 root    root    116928 jun 18 19:22 lib64

drwxr-xr-x   8 root    root      3184 jun 12 21:00 libexec

drwxr-xr-x  10 root    root       312 jun  1  2008 local

drwxr-xr-x   3 root    root        72 feb 25 18:41 man

drwxr-xr-x 163 portage portage   4840 jun 18 18:09 portage

drwxr-xr-x   3 root    root        72 jun  1  2008 qt

drwxr-xr-x   2 root    root      5672 jun 12 21:00 sbin

drwxr-xr-x 189 root    root      4952 may 26 21:39 share

drwxr-xr-x   6 root    root       256 may  1 21:50 src

lrwxrwxrwx   1 root    root         8 may 25  2008 tmp -> /var/tmp

drwxr-xr-x   6 root    root       152 abr 19  2007 x86_64-pc-linux-gnu

```

Lo del ebuild compilable es más chungo. Lo primero que pensé fue que habían sacado el código fuente de un paquete compilable en sí mismo con los consabidos ./configure, make, make install, o similar, pero parece ser que no. No he conseguido compilarlo "tal cual". Al parecer el código debe parchear el opensc o algo así, según cuentan en kriptópilis.

--- Edito: había puesto el directorio de /usr/local ---

----------

## pcmaster

Hola de nuevo.

Acabo de crear un nuevo ebuild para instalar la versión 1.4.6 con un wrapper que permite su uso con cualquier versión de opensc (al menos de Opensc-0.11.x). Está basado en el método publicado en http://www.kriptopolis.org/wrapper-edni-fedora-linux

El ebuild puede que no esté hecho de la mejor forma, ya que hace un par de llamadas a gcc desde el propio ebuild, pero al menos, funciona.

Tenemos que tener los siguientes archivos:

/usr/local/portage/dev-libs/opensc-dnie/opensc-dnie-1.4.6-r1.ebuild:

```
# Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="Controlador opensc para el DNI electrónico"

HOMEPAGE="www.dnie.es"

SRC_URI="x86? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_i386.deb.tar )

amd64? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_amd64.deb.tar ) "

LICENSE="DGP"

SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE=""

DEPEND="<dev-libs/opensc-0.12

      sys-devel/binutils

      app-arch/tar"

RDEPEND="dev-lang/perl

      <dev-libs/opensc-0.12"

src_install() {

   if use amd64; then

      ARQ="_amd64"

   else

      ARQ="_i386"

   fi

   ar -x ${PN}_1.4.6-2${ARQ}.deb || die "Extract failed"

   cd ${D}

   tar xvzf ${WORKDIR}/data.tar.gz || die "Install failed"

   # parcheo de versión

   cd ${T}

   cp ${D}/usr/lib/libopensc-dnie.so.1.0.3 libopensc-dnie.so.1.0.3.orig

   OVER=`ls /var/db/pkg/dev-libs/opensc-0* -d|cut -d "/" -f 6|cut -b 8-`

   cp ${FILESDIR}/versionpatch.c ${T}/patch.c

   sed -i "s/0.0.0/${OVER}/g" ${T}/patch.c

   gcc -fpic -g -c -Wall patch.c

   objcopy --redefine-sym sc_driver_version=orig_sc_driver_version   libopensc-dnie.so.1.0.3.orig libopensc-dnie.so.1.0.3

   gcc -shared -Wl,-soname,libwrapper-dnie.so libopensc-dnie.so.1.0.3 patch.o -o libwrapper-dnie.so.1.0.0

   dolib libwrapper-dnie.so.1.0.0 libopensc-dnie.so.1.0.3

}

pkg_postinst() {

   grep dnie /etc/opensc.conf >${T}/odc

   if ( ! test -s ${T}/odc ); then

      patch -b /etc/opensc.conf ${FILESDIR}/opensc-dnie-wrap.conf.patch

   fi

}

pkg_postrm() {

   if ( test -e /etc/opensc.conf.orig ); then

      rm /etc/opensc.conf

      mv /etc/opensc.conf.orig /etc/opensc.conf

   fi

}

```

/usr/local/portage/dev-libs/opensc-dnie/files/versionpatch.c

```
char *patched_driver_version="0.0.0";

char * sc_driver_version() {

   return patched_driver_version;

}

```

/usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie-wrap.conf.patch

```
49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

> 

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libwrapper-dnie.so;

>    }

```

Si se actualiza opensc, habrá que reinstalar opensc-dnie  para que el wrapper se compile para la nueva versión.

----------

## mimosinnet

 *pcmaster wrote:*   

> Hola de nuevo.
> 
> Acabo de crear un nuevo ebuild para instalar la versión 1.4.6 con un wrapper que permite su uso con cualquier versión de opensc (al menos de Opensc-0.11.x). Está basado en el método publicado en http://www.kriptopolis.org/wrapper-edni-fedora-linux

 

Lo he estado probando y no me funciona bien. Obtengo mensajes del tipo:

```
[opensc-pkcs11] card_sync.c:995:card_sync_card_to_virtual_fs_data_file_callback: returning with: Security status not satisfied

[opensc-pkcs11] iso7816.c:99:iso7816_check_sw: Security status not satisfied

[opensc-pkcs11] base_card.c:1208:card_read_binary: returning with: Security status not satisfied

[opensc-pkcs11] card.c:430:sc_read_binary: returning with: Security status not satisfied

[opensc-pkcs11] card.c:415:sc_read_binary: sc_read_binary() failed: Security status not satisfied

[opensc-pkcs11] card_helper.c:83:card_helper_read_file: returning with: Security status not satisfied

[opensc-pkcs11] card_sync.c:995:card_sync_card_to_virtual_fs_data_file_callback: returning with: Security status not satisfied
```

He revisado el artículo de Kriptópolis, y jonsito comenta:

 *Quote:*   

> Enviado por jonsito el 13 Abril 2010 - 5:07pm.
> 
> Tras el subidón, tengo que constatar que el wrapper no termina de funcionar:
> 
> Si bien el módulo propietario se carga sin problemas, y las operaciones básicas funcionan, aquellas operaciones que requieren de pin fallan... con lo que el wrapper deja de ser útil más allá que como "prueba de concepto".
> ...

 

Por suerte tenemos el ebuild opensc-dnie-1.4.7!

Gracias por el esfuerzo!

Abrazos miles!

----------

## pcmaster

Hola,

Todos los ebuild que he hecho no instalan el opensc que viene con el paquete dnie, sino el de Gentoo. Quizá lo que dices se deba  adiferencias entre versiones de opensc, más que a modificaciones hechas al opensc por la DGP.

Por cierto, ¿has importado el certificado raiz que hay en /usr/share/opensc-dnie/ac_raiz_dnie.crt?

Por cierto, el .deb de la versión 1.4.7 no trae el opensc compilado, sólo el opensc-dnie, lo que significa que no trabaja con uan versión de opensc modificada, sino la que trae cada distribución.

----------

## mimosinnet

Gracias por la respuesta!

Efectivamente, he intentado volver a dev-libs/opensc-dnie-1.4.7, pero no he podido compilar dev-libs/opensc-0.11.8 ya que obtengo el error:

```
checking LIBASSUAN API version... does not match.  want=1 got=2
```

Entiendo que para usar opensc-dnie-1.4.7 debería instalar dev-libs/libassuan-1.0.5 en un slot (pues gnupg necesita libassuan>=2)...

Así que he vuelto al dev-libs/opensc-dnie-1.4.6-r1, y obtengo el mismo problema que serhost2 en la web de criptópolis. Firefox me pide el PIN del DNIe, me deja seleccionar el certificado de firma o el de autenticación, pero después de seleccionarlo obtengo en el firefox, para el carnet por puntos:

```
sec_error_pkcs11_general_error
```

y en la comprobación del DNIe:

```
ssl_error_bad_cert_alert
```

Estos son los mensajes en .xsession-errors:

```
# tail /home/o3o/.xsession-errors 

[opensc-pkcs11] base_card.c:1208:card_read_binary: returning with: Security status not satisfied

[opensc-pkcs11] card.c:430:sc_read_binary: returning with: Security status not satisfied

[opensc-pkcs11] card.c:415:sc_read_binary: sc_read_binary() failed: Security status not satisfied

[opensc-pkcs11] card_helper.c:83:card_helper_read_file: returning with: Security status not satisfied

[opensc-pkcs11] card_sync.c:995:card_sync_card_to_virtual_fs_data_file_callback: returning with: Security status not satisfied

[opensc-pkcs11] base_card.c:1034:card_select_file: returning with: File not found

[opensc-pkcs11] card.c:554:sc_select_file: returning with: File not found

[opensc-pkcs11] pkcs15-sec.c:56:select_key_file: sc_select_file() failed: File not found

[opensc-pkcs11] pkcs15-sec.c:260:sc_pkcs15_compute_signature: Unable to select private key file: File not found

[opensc-pkcs11] reader-pcsc.c:696:pcsc_unlock: SCardEndTransaction failed: 0x80100069

[opensc-pkcs11] card_helper.c:83:card_helper_read_file: returning with: Security status not satisfied

[opensc-pkcs11] card_sync.c:995:card_sync_card_to_virtual_fs_data_file_callback: returning with: Security status not satisfied

[opensc-pkcs11] base_card.c:1034:card_select_file: returning with: File not found

[opensc-pkcs11] card.c:554:sc_select_file: returning with: File not found

[opensc-pkcs11] pkcs15-sec.c:56:select_key_file: sc_select_file() failed: File not found

[opensc-pkcs11] pkcs15-sec.c:260:sc_pkcs15_compute_signature: Unable to select private key file: File not found
```

Sigo explorando.

Abrazos!

----------

## cameta

No me funciona el parche.

patching file /etc/opensc.conf

patch: **** `>' expected at line 5 of patch

----------

## pcmaster

Pon el contenido de tu archivo /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie.conf.patch

Debe ser:

```

$ cat /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie.conf.patch

49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

> 

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libopensc-dnie.so;

>    }

```

----------

## cameta

El nombre es diferente y la libreria también

```
cat /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie-wrap.conf.patch 

49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

>

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libwrapper-dnie.so;

>    } 

```

----------

## pcmaster

Perdona, hay dos archivos de patch, el otro es /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie-wrap.conf.patch

```
$ cat /usr/local/portage/dev-libs/opensc-dnie/files/opensc-dnie-wrap.conf.patch

49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

> 

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libwrapper-dnie.so;

>    }

```

----------

## cameta

Pues me parece que son identicas:

```
49a50

>    reader_drivers=pcsc;

121a123,128

>    card_drivers = dnie;

>

>    card_driver dnie {

>       #The location of the driver library

>       module = /usr/lib/libwrapper-dnie.so;

>    } 
```

Ah si cuando acabo de instalar el mensaje de error que da es este:

* QA Notice: Pre-stripped files found:

 * /usr/lib/libopensc-dnie.so.1.0.3

strip: i686-pc-linux-gnu-strip --strip-unneeded -R .comment

   usr/lib/libwrapper-dnie.so.1.0.0

   usr/lib/libopensc-dnie.a

making executable: usr/lib/libopensc-dnie.so.1.0.3

making executable: usr/lib/libwrapper-dnie.so.1.0.0

>>> Installing (1 of 1) dev-libs/opensc-dnie-1.4.6-r1

patching file /etc/opensc.conf

patch: **** `>' expected at line 5 of patch

>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

Tambien uso la siguiente versión de opensc:

[ebuild   R   ] dev-libs/opensc-0.11.13  USE="pcsc-lite -doc -openct" 0 kB

a lo mejor es culpa de que usa una nueva version de opensc.conf, pero en ese caso puedo intentar hacerlo manualmente.

----------

## cameta

Tras parchear a mano y seguir el resto de pasos la cosa sigue sin funcionar.

Firefox no reconoce la tarjeta:

```
[opensc-pkcs11] ctx.c:351:load_dynamic_driver: Module dnie: cannot load /usr/lib/libwrapper-dnie.so library: file not found 

[opensc-pkcs11] ctx.c:467:load_card_drivers: Unable to load 'dnie'.

[opensc-pkcs11] card.c:213:sc_connect_card: unable to find driver for inserted card

[opensc-pkcs11] card.c:228:sc_connect_card: returning with: Card is invalid or cannot be handled

```

Pues esta 

mestres@tux ~ $ ls /usr/lib/libwrapper-dnie.so

/usr/lib/libwrapper-dnie.so)[/quote]

Menuda chapuza de DNI electrónico esto no hay ni dios que consiga arrancarlo en Linux.

 :Twisted Evil:   :Twisted Evil:   :Twisted Evil:   :Twisted Evil:   :Twisted Evil: 

----------

## cameta

Intentaré con las antiguas versiones de opensc a ver que ocurre.

----------

## cameta

He conseguido que funcione con la 1.4.7.

Pero eso si el firefox se queja 

[opensc-pkcs11] iso7816.c:99:iso7816_check_sw: Security status not satisfied

[opensc-pkcs11] base_card.c:1208:card_read_binary: returning with: Security status not satisfied                                                                      

[opensc-pkcs11] card.c:430:sc_read_binary: returning with: Security status not satisfied                                                                              

[opensc-pkcs11] card_helper.c:326:card_helper_read_certificate_file: returning with: Security status not satisfied                                                    

[opensc-pkcs11] card_sync.c:880:card_sync_card_to_virtual_fs_certificate_file_callback: returning with: Security status not satisfied                                 

[opensc-pkcs11] iso7816.c:99:iso7816_check_sw: Security status not satisfied       

[opensc-pkcs11] base_card.c:1208:card_read_binary: returning with: Security status not satisfied                              

bueno ya iremos chafardeando más.

----------

## cameta

He tenido que modificar el ebuild:

Alguien se ha cargado la web del dni electrónico.  :Crying or Very sad:   :Crying or Very sad:   :Crying or Very sad: 

```
# Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="Controlador opensc para el DNI electrónico"

HOMEPAGE="www.dnie.es"

SITE="http://www.policia.es/dnie/descargas/pkcs11_para_sistemas_unix/software"

SRC_URI="x86? ( ${SITE}/1.4.7.ubuntu_karmic_32/ubuntu_karmic_${PN}_1.4.7-2_i386.tar )

amd64? ( ${SITE}/1.4.7.ubuntu_karmic_64/ubuntu_karmic_${PN}_1.4.7-2_amd64.tar ) "

LICENSE="DGP"

SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE=""

DEPEND="=dev-libs/opensc-0.11.8

      sys-devel/binutils

      app-arch/tar"

RDEPEND="dev-lang/perl

      =dev-libs/opensc-0.11.8"

src_install() {

   if use amd64; then

      ARQ="_amd64"

   else

      ARQ="_i386"

   fi

   ar -x ${PN}_1.4.7-1${ARQ}.deb || die "Extract failed"

   cd ${D}

   tar xvzf ${WORKDIR}/data.tar.gz || die "Install failed"

}

pkg_postinst() {

   grep dnie /etc/opensc.conf >${T}/odc

   if ( ! test -s ${T}/odc ); then

      patch -b /etc/opensc.conf ${FILESDIR}/opensc-dnie.conf.patch

   fi

}

pkg_postrm() {

   if ( test -e /etc/opensc.conf.orig ); then

      rm /etc/opensc.conf

      mv /etc/opensc.conf.orig /etc/opensc.conf

   fi

}

```

----------

## pcmaster

Actualización: En las nuevas versiones de pcsc-lite, ya no está disponible el soporte HAL, y por tanto para que detecte el lector hay que compilarlo con la USE="usb"

----------

## Jorginho

Os informo de un fallo que habia en el ebuild de opensc-dnie. La correcion esta en que la linea =dev-libs/opensc-0.11.13-r2 no estaba asi >=dev-libs/opensc-0.11.13-r2 el cual ocasionaba estos problemas:

emerge: there are no ebuilds to satisfy "=dev-libs/opensc-0.11.7".

(dependency required by "dev-libs/opensc-dnie-1.4.6" [ebuild])

(dependency required by "opensc-dnie" [argument])

Os pongo aqui el codigo corregido:

```
# Copyright 1999-2009 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2

# $Header: $

DESCRIPTION="Controlador opensc para el DNI electrónico"

HOMEPAGE="www.dnie.es"

SRC_URI="x86? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_i386.deb.tar )

amd64? ( http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/${PN}_1.4.6-2_amd64.deb.tar ) "

LICENSE="DGP"

SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE=""

DEPEND=">=dev-libs/opensc-0.11.13-r2

      sys-devel/binutils

      app-arch/tar"

RDEPEND="dev-lang/perl

      >=dev-libs/opensc-0.11.13-r2"

src_install() {

   if use amd64; then

      ARQ="_amd64"

   else

      ARQ="_i386"

   fi

   ar -x ${PN}_1.4.6-2${ARQ}.deb || die "Extract failed"

   cd ${D}

   tar xvzf ${WORKDIR}/data.tar.gz || die "Install failed"

}

pkg_postinst() {

    grep dnie /etc/opensc.conf >${T}/odc

    if ( ! test -s ${T}/odc ); then

        patch -b /etc/opensc.conf ${FILESDIR}/opensc-dnie.conf.patch

    fi

}

pkg_postrm() {

    if ( test -e /etc/opensc.conf.orig ); then

        rm /etc/opensc.conf

        mv /etc/opensc.conf.orig /etc/opensc.conf

    fi

}
```

----------

## pcmaster

Jorginho, ¿te funciona?

----------

## johnlu

¿Qué sabéis respecto al nuevo opendnie?

Quizás deberíamos ver como hacerlo funcionar y preparar un ebuild, ¿os animáis?

http://forja.cenatic.es/projects/opendnie/

----------

## i92guboj

Breve inciso: qué lectores de tarjetas estais usando para el dnie? Yo compré uno hace unos meses pero me equivoqué al hacerlo y resultó no ser compatible con los drivers ccid. Lo que es no tener ni idea del tema... Hoy me acordé de este hilo y pensé que sería buena idea preguntar por aquí.

Gracias de antemano.

----------

## pcmaster

Debería funcionar con cualquier lector compatible con el driver estandar CCID. De hecho, yo he usado un Cherry ST1210 y el SCM Mycrosystems SCR3310 debe funcionar.

También se supone que funciona el C3PO LTC31 V2.0

¿Qué modelo de lector has comprado?

----------

## i92guboj

 *pcmaster wrote:*   

> Debería funcionar con cualquier lector compatible con el driver estandar CCID. De hecho, yo he usado un Cherry ST1210 y el SCM Mycrosystems SCR3310 debe funcionar.
> 
> También se supone que funciona el C3PO LTC31 V2.0
> 
> ¿Qué modelo de lector has comprado?

 

Perdón por la tardanza, por algún motivo perdí el hilo de esta conversación.

Me compré on Woxter, no me acuerdo ya del modelo porque lo vendí al poco tiempo. En la misma lista de correo de MUSCLE me dijeron que me olvidara de tener jamás soporte para ese lector, con una negativa más categórica de parte de la gente que tiene dicho proyecto en sus manos tampoco me quedaron ganas de investigar mucho más. 

Gracias por la respuesta, a ver si puedo encontrar alguno de esos lectores que comentas en alguna tienda local, si no tendré que buscarlos online.

----------

## Arctic

 *cameta wrote:*   

> En el tesoro público www.tesoro.es con la firma electrónica puedo acceder a mis inversiones, pero no puedo firmar para suscribir o renovar (y tengo que usar un windows) 
> 
> pirata evidentemente.

 

No necesareamente , tienes una opcion mas comoda que esa , vas a la administracion del estado , y pides un certificado digital , te haran firmar un papelito y te daran un codigo con el que te descargaras dicho certificado, con el cual podras interactuar sin problema alguno, ademas dicho certificado se puede cifrar con una contraseña para que nadie que se hiciese con el pueda usarlo.Supongo que es la unica solucion que tendra la gente que aun no disponga de dni con chip.

Salu2

----------

