"Después del juego es antes del juego"
Sepp Herberger

Mostrando entradas con la etiqueta certificado digital. Mostrar todas las entradas
Mostrando entradas con la etiqueta certificado digital. Mostrar todas las entradas

miércoles, 9 de abril de 2025

Hacer funcionar DNIe en Ubuntu.

De vez en cuando un usuario me pide utilizar el DNIe en los sistemas Ubuntu. Dado que no existe un único paquete que resuelva todos los pasos de forma automática me hice una guia:

1. Instalación de software básico.

Los primeros paquetes a instalar son:
# apt-get install  pcscd pcsc-tools libccid libnss3-tools
Luego debemos instalar el paquete libpkcs11-dnie, que se descarga desde https://www.dnielectronico.es/.
# dpkg -i libpkcs11-dnie_X.Y.Z_amd64.deb
La versión X.Y.Z depende de nuestra versión de Ubuntu, cada cual que ponga la que le corresponde. Para Xubuntu 22.04 es 1.6.8. En mi caso tengo un repositorio reprepro privado para mi red, de tal manera que subo alli los paquetes sueltos que descargo. En este escenario puedo instalar el paquete con apt-get:
# apt-get update
# apt-get install libpkcs11-dnie
Una vez instalado todo, metememos el DNIe en el lector y vemos si es detectado con:
# pcsc_scan
Si todo ha ido bien deberia mostrarse información sobre como el lector detecta el DNIe español.

2. Lectores Smartcad Probados.

He trabajado con estos lectores verificando que funcionan:
  • SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00. Es el lector oficial que regalaba el Ministerio del Interior. En lsusb se muestra como "04e6:5116 SCM Microsystems, Inc. SCR331-LC1 / SCR3310 SmartCard Reader".
  • Generic Smart Card Reader Interface [Smart Card Reader Interface] (20070818000000000) 00 00. Este lector es un lector común clonico. Se detecta por lsusb como "0bda:0165 Realtek Semiconductor Corp."
  • Teclados HP: 03f0:104a HP, Inc HP USB Smartcard CCID Keyboard. Son unos teclados con lector SmartCard integrado que nos mandaron a los centros hace años. Se detecta como "0: Hewlett Packard HP USB Smartcard CCID Keyboard [HP Smartcard Keyboard] (15082100001733) 00 00"

3. Configuración de navegadores.

Con instalar los paquetes anteriores no es suficiente. Hay que configurar los navegadores web para que detecten y manejen el DNIe. Además esta configuración no es general de la máquina: hay que hacerla para cada usuario vaya a usar el DNIe.

Se puede hacer de dos maneras: con ratón entrando en la configuración del navegador o mediante comandos. Yo prefiero usar los comandos porque es mucho más rápido.

3.1. Configuración de Google Chrome.

Configuración gráfica:
  • Configuración > Configuración > Configuración avanzada > Privacidad y seguridad > Más > Gestionar certificados -> PIN DNIe -> Desbloquear
  • Entidades Emisoras -> Importar -> /usr/share/libpkcs11-dnie/ac_raiz_dnie.crt -> Aceptar -> Confiar en todo -> Aceptar
Configuración mediante comandos:
  • Cerrar chrome "pkill --oldest chrome".
  • Instalar libreria dnie en home usario:
    # mkdir -p $HOME/.pki/nssdb
    # modutil -force -add "DNI-e" -libfile /usr/lib/libpkcs11-dnie.so -dbdir sql:$HOME/.pki/nssdb
    # modutil -list -dbdir sql:$HOME/.pki/nssdb
    
  • Instalar certificado DG Policia:
    # certutil -A -n "DNIe" -t "CT,C,C" -i /usr/share/libpkcs11-dnie/AC\ RAIZ\ DNIE\ 2.crt -d $HOME/.pki/nssdb
    # certutil -L -d sql:$HOME/.pki/nssdb
    

3.2. Configuración de Firefox.

Configuración gráfica:
  • Privacidad y seguridad -> Dispositivos de seguridad -> Cargar -> Nombre DNIe y añadimos la ruta del Archivo del módulo: /usr/lib/libpkcs11-dnie.so -> Aceptar
  • Ver certificados (no seria necesario seguramente, el certificado de la DG Policia ya viene de serie) -> Autoridades -> pinchamos en Importar: /usr/share/libpkcs11-dnie/AC\ RAIZ\ DNIE\ 2.crt -> Aceptar -> Confiar en todo -> Aceptar
Configuración mediante comandos:
  • Cerrar firefox: "pkill --oldest firefox"
  • Instalar libreria dnie en todos los perfiles firefox del home del usuario.
    # rm -f /tmp/pkcs11.txt
    # echo "library=/usr/lib/libpkcs11-dnie.so" >> /tmp/pkcs11.txt
    # echo "name=DNI-e" >> /tmp/pkcs11.txt
    # perfiles=$(ls $HOME/.mozilla/firefox/ | grep .default)
    # for i in $perfiles; do
        cp /tmp/pkcs11.txt $HOME/.mozilla/firefox/$i/pkcs11.txt
      done
    # find $HOME/.mozilla/firefox | grep pkcs11.txt
    
  • Instalar certificado DG Policia en todos los perfiles firefox del home del usuario: no es necesario, viene de serie en Firefox. Podemos confirmar que está con el comando:
    # for i in $(ls $HOME/.mozilla/firefox/ | grep .default) ; do
       certutil -L -d $HOME/.mozilla/firefox/$i
    done
    
AVISO: Firefox es mas propenso a tener errores leyendo el DNIe que Google Chrome. Si operando con él no funciona o no es detectado, se recomienda cerrar el navegador y empezar de nuevo.

4. Bonus Track: Autofirma y ConfiguradorFNMT.

Para tener todo el entorno relacionado con la firma digital bien, se aconseja instalar además:
5. Scripts.

Todo lo anterior en scripts:
# cat 01-instala-software.sh 
#!/bin/bash
echo "Instalando software general. Le pediremos la contraseña de root si es necesaria"
su -c "apt-get install -y pcscd pcsc-tools libccid libnss3-tools"

echo "Instalando software especificio DNIe (paquete libpkcs11-dnie). Si no está en el repositorio puede descargarlo"
echo "    de la página de Descargas del DNIe  https://www.dnielectronico.es/portaldnie/PRF1_Cons02.action?pag=REF_1110."
echo "           Version Xubuntu 18  =   1.5.3" 
echo "           Version Xubuntu 22  =   1.6.8"
echo "    E instale el paquete .deb con dpkg -i ..."
su -c "apt-get install libpkcs11-dnie"

echo "Todo instalado puede probar si se detecta el lector y el DNIe con el comando pcsc_scan ejecutado como root."  
exit 0
Scripts para ejecutar con cada usuario que necesite tener acceso al DNIe:
# cat cat 02-configura-dnie-google-chrome.sh 
#!/bin/bash
echo "Instalando libreria y certificados en Google Chrome."
echo "Si se borra el perfil del usuario habria que reinstalar de nuevo."
echo "Cerramos google-chrome."
pkill --oldest chrome
echo ""
echo "Instalando libreria libpkcs11-dnie.so"
mkdir -p $HOME/.pki/nssdb
modutil -force -add "DNI-e" -libfile /usr/lib/libpkcs11-dnie.so -dbdir sql:$HOME/.pki/nssdb
echo ""
echo "Instalando certificado AC\ RAIZ\ DNIE\ 2.crt "
certutil -A -n "DNIe" -t "CT,C,C" -i /usr/share/libpkcs11-dnie/AC\ RAIZ\ DNIE\ 2.crt -d $HOME/.pki/nssdb
echo ""
echo "Instalado. Puede verificar que  está correcto haciendo:"
echo '     modutil -list -dbdir sql:$HOME/.pki/nssdb'
echo '     certutil -L -d sql:$HOME/.pki/nssdb'
# cat 03-configura-dnie-firefox.sh 
#!/bin/bash
echo "Instalando libreria y certificados en Firefox."
echo "Si se borra el perfil del navegador habria que reinstalar de nuevo."
echo "Cerramos Firefox."
pkill --oldest firefox

#Libreria acceso lector DNIe  - Firefox
rm -f /tmp/pkcs11.txt
echo "library=/usr/lib/libpkcs11-dnie.so" >> /tmp/pkcs11.txt
echo "name=DNI-e" >> /tmp/pkcs11.txt

echo "Instalando libreria libpkcs11-dnie.so"
perfiles=$(ls $HOME/.mozilla/firefox/ | grep .default)
for i in $perfiles
do
    cp /tmp/pkcs11.txt $HOME/.mozilla/firefox/$i/pkcs11.txt
done
echo ""

echo "No es necesario instalar certificado de la Dirección General de la Policía. Viene por defecto en Firefox."
echo ""
#Descomentar si queremos instalarlo en cualquier caso.
#perfiles=$(ls $HOME/.mozilla/firefox/ | grep .default)
#for i in $perfiles
#do
#     certutil -A -n "DNIe" -t "CT,C,C" -i  /usr/share/libpkcs11-dnie/AC\ RAIZ\ DNIE\ 2.crt -d $HOME/.mozilla/firefox/$i
#done

echo "Instalado. Puede verificar que está instalado todo haciendo:"
echo '     find $HOME/.mozilla/firefox | grep pkcs11.txt'
echo '     for i in $(ls $HOME/.mozilla/firefox/ | grep .default)'
echo '     do'
echo '        certutil -L -d $HOME/.mozilla/firefox/$i'
echo '     done'

exit 0
Creo que con esto está todo, a no ser que a alguien se le ocurra algún artefacto más relacionado con los certificados digitales.

lunes, 20 de julio de 2020

Instalar DNIe español en Manjaro/Arch

Pasada mi penúltima pelea con los certificados digitales y recibiendo una sorpresa más al comprobar, en otra escaramuza posterior, que para solicitar el certificado digital por vez primera la FNMT también te obliga a usar Firefox 68 o Internet Explorer (no Edge) en el cual además el usuario raso debe configurar zonas a mano (la configuración automática no funciona las veces que he probado), me propuse ver si hacía funcionar el certificado digital del DNIe en Manjaro, usando el lector USB correspondiente. Es una tarea que he intentado varias veces en los últimos años casi siempre con mala fortuna.

Veo en AUR que hay varios paquetes con "dnie" en su nombre y que además parecen actualizados y mantenidos por sus respectivos héroes.

Los instalo con pamac:
$ pamac install ca-certificates-dnie
$ pamac install libpkcs11-dnie

Nota: el paquete libpkcs11-dnie de AUR es una adaptación del paquete Ubuntu_libpkcs11-dnie_1.5.3_amd64.deb para Ubuntu que el DNIe publica en su página de software para Linux. Entiendo que casi todos los pasos que aquí damos pueden realizarse de forma similar para Debian/Ubuntu.

El paquete ca-certificates-dnie trae todos los certificados raiz necesarios para tratar con el DNIe, mientras que libpkcs11-dnie trae las librerias de acceso al dispositivo. Al finalizar la instalación del paquete nos da unas directrices para completar la instalación a mano:
Instalando libpkcs11-dnie (1.5.3-1)...                                     [1/1]
Configurando libpkcs11-dnie...
    >>>
    >>> Installation:
    >>>
    >>> 1) If you don't already have it, enable and start pcscd: systemctl enable --now pcscd.service
    >>> 2) Connect your smartcard reader without any smartcard in it and run: pcsc_scan
    >>> 3) It should show info about your smartcard and tell you that there isn't any in it. Now insert your DNIe and it
    >>> should show info about it. Now you know that your DNIe can be read by your smartcard reader.
    >>> 4) To use your DNIe on Firefox, search for dnietif in your desktop environment applications launcher, run it
    >>> and follow instructions
    >>>
Hacemos lo que nos dice y seguimos los pasos: habilitamos y arrancamos pcscd.service...
# systemctl enable --now pcscd.service
Conectamos el lector de DNIe y hacemos pcsc_scan a ver si de detecta el dispositivo:

$ pcsc_scan 
Using reader plug'n play mechanism
Scanning present readers...
0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
 
Mon Jul 20 19:46:10 2020
 Reader 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
  Event number: 0
  Card state: Card removed, 
  ....
Insertamos el DNIe con el chís y vemos como se detecta:
Mon Jul 20 19:47:14 2020
 Reader 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
  Event number: 1
  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 [12]0 02 4C 34 01 13 03 90 00
 DNI electronico (Spanish electronic ID card)
 http://www.dnielectronico.es
....
Buscamos el programa dnietif para configurar el Firefox y usarlo con el DNIe:


En el menú de aplicaciones "dnietif" aparece como "Registrar módulo PKCS#11 dnie (1.5.3)" y en realidad es un lanzador al ejecutable "/usr/share/libpkcs11-dnie/launch.pl". Este ejecutable no hace nada especial, simplemente nos abre una página web (/usr/share/libpkcs11-dnie/launch.html) con más instrucciones a realizar manualmente:


Los pasos descritos se realizarán sobre Firefox:
  • Instalación del DNI Electrónico. Para usar el DNI electrónico se requiere:
    • Instalar el Módulo de Seguridad PKCS#11
    • Para instalar el módulo PCKS#11 debe ir a Editar/Preferencias/Avanzado/Cifrado/Dispositivos de seguridad
    • Seleccione "Cargar"
    • Dele un nombre al módulo. (Por ejemplo "DNIe Modulo PKCS # 11")
    • Indique manualmente la ruta del módulo: /usr/lib/libpkcs11-dnie.so
    • Pulse el botón "Aceptar"
  • Instalar el Certificado Raíz de la Autoridad de Certificación del DNIe
    • Para instalar el certificado raíz ir a Editar/Preferencias/Avanzado/Cifrado/Ver certificados
    • Seleccione "Importar".
    • Indique manualmente la ruta del certificado raíz: /usr/share/libpkcs11-dnie/ac_raiz_dnie.crt
    • El asistente le pedirá que establezca la confianza para el certificado.
    • Marque las tres casillas de confianza.
    • Pulse el botón "Aceptar".

Una vez hecho esto, reiniciamos el navegador, vamos a "Visualizar certificados" en las Preferencias para ver el DNIe y nos pedirá el correspondiente PIN para acceder:


Y ahí está el certificado del DNIe junto con los que ya tenía antes de la FNMT:


No son pasos triviales, pero sorprendentemente y por primera vez en mucho tiempo funcionan a la primera sin mayor complicación, lo cual es todo un avance. Eso si: me preocupa que la parte de configuración del Firefox no pueda automatizarse de alguna manera... En fin, para una vez que funciona algo relacionado con la firma digital no vamos a quejarnos.

jueves, 7 de mayo de 2020

Renovación del certificado digital de la FNMT sin morir en el intento

Este año me tocaba renovar el certificado digital, como ya he hecho varias veces desde que lo saqué a principios de siglo. Hasta ahora no había tenido problemas, ya que es lógico que pueda ser renovada desde casa una herramienta que sirve para realizar trámites oficiales a distancia sin tener que moverse físicamente a ningún sitio.

Pero esta vez no ha sido fácil. Al intentar renovarlo con Manjaro Linux y Firefox me encuentro con:


Vaya, necesito Firefox 68 o Internet Explorer. No valen Chrome, Safari, Edge ni Firefox modernos. Tiene que ser Firefox ESR en lugar de mi Firefox 75. Recuerdo haber leído algo referido a que Firefox había cambiado su sistema de gestión de extensiones hace tiempo y muchos procesos de la FNMT ya no funcionaban.

Esto obliga al usuario normal, sea cual sea su nivel, a descargar e instalar (o descomprimir, si es una versión portable y no instalable) una versión antigua de Firefox, con los problemas que puede traer esto al tener 2 Firefox en activo en la misma máquina. Además podría tener que verse obligado a instalar su certificado digital personal en el perfil del nuevo Firefox, ya que no siempre aparece el que está instalado en Firefox moderno.

No se preocupen hay un rayo de esperanza: en la página de aviso anterior aparece: "CERES-FNMT ultima el diseño de una herramienta para obtener y renovar el certificado digital desde cualquier navegador y sistema operativo", con este enlace, que te lleva a:


Vamos, que no tienen contratado ni el dominio de la herramienta neutra de renovación de certificado. Vamos bien.

Venga, ya está descargado e instalado Firefox 68, vamos a pedir la renovación. Esta vez no se queja del navegador y nos deja elegir certificado, pero llegamos a:



No me lo puedo creer. Da problemas SEC_ERROR_UNKNOWN_ISSUER con el certificado de apuc20.cert.fnmt.es y no me deja seguir. Buscando en Internet aconsejan entrar en "about:config" del Firefox y cambiar el parámetro security.enterprise_roots.enabled de true a false:


Lo cambio, reinicio el navegador y repito los pasos. Nada, ni con esas. Un compañero me sugirió descargar y reinstalar todos los certificados raíz de la FNMT y lo cierto es que en uno de esos intentos, tras haber limpiado el perfil del Firefox por completo borrando el directorio .mozilla me dejó avanzar un poco más, pidiéndome actualizar datos para renovar el certificado, pero se paraba todo al ir a firmar la petición, dejándome una ventana de navegador en blanco.

Cambié de estrategia y abandoné Linux para probar con Firefox 68 en OSX y Windows, y Explorer en Windows. Nada, el mismo error de SEC_ERROR_UNKNOWN_ISSUER.

Solución.

Para todo hay una solución: en este caso es usar LinuxAE. LinuxAE es "una distribución para realizar trámites con la Administración Electrónica de España", como cuentan con detalle aquí.

Lo bueno es que no se pierde una mañana instalando: es una imagen .OVA de máquina virtual, que se descarga, importa y ejecuta con VirtualBox de una forma rápida. Una vez la arrancamos nos sale en una ventana un Debian virtualizado (en el que entramos con las credenciales "ciudadano/ciudadano") que está especialmente tuneado y afinado para trabajar con la administración electrónica española. Tras importar mi certificado digital en su navegador Firefox no tuve problema en renovarlo y descargarlo en menos de 10 minutos.

Desde luego, LinuxAE es un excelente trabajo que además es actualizado con frecuencia por su autor. Creo que incluso ha logrado el imposible de hacer funcionar el DNIe en Linux, lo cual es ya de sobresaliente alto.

Una pista: en una parte del proceso me piden firmar la petición con AutoFirma. Aunque en la página de la FNMT de renovación no se dice en ningún lado y durante los intentos previos no se avisaba de nada, quizá sea necesario tenerlo instalado para completar el proceso de firma. Demasiado tarde, con LinuxAE ya viene de serie y no hemos tenido que toquetear nada.

Conclusión.

Es intolerable que la FNMT obligue a realizar todos estos estrambóticos pasos a un usuario medio para renovar su certificado. Todo me recuerda este antiguo caso que posteé aquí en 2015. Esto aleja la Administración Electrónica del ciudadano y da una imagen de caos interno. ¿Alguna vez tendremos un panorama homogéneo y actualizado para usar estas herramientas? Les doy otros 5 años.


Esta es una foto de la Luna tomada desde España y desde Chile, el mismo día y a la misma hora solar.


Como se puede apreciar, la Luna se ve girada y reflejada de eje debido a que una foto es en el hemisferio norte y la otra en el hemisferio sur. La imagen de España está tomada apuntando al sudeste, la de Chile apuntando al nordeste.

Sencillo experimento científico para demostrar por uno mismo que la Tierra es esférica, y si no lo es que me lo expliquen los terraplanistas.

A ver si encuentro otra prueba equivalente para los conspiranoicos del SARS-CoV-2.