1. Problemas surgidos
Para identificar la tarjeta se ejecuta pcsc_scan y nos dice que la tarjeta es del tipo G&D SmartCafe Expert 7 (JavaCard)
Y no había manera de poder configurar dicha tarjeta
- Ya había drivers anteriores libaetpkss.so pero eran de 32 bits y por tanto incompatibles. Cuando se ejecutaba: pkcs11-tool --module /usr/lib/libaetpkss.so --list-slots respondía:
sc_dlopen failed: /usr/lib/libaetpkss.so: wrong ELF class: ELFCLASS32
error: Failed to load pkcs11 module
Aborting.
- La localizacion de dichos drivers anteriores era en /usr/lib
- Los drivers "bit4id" que aparecen el la ACCV parece ser que son para el lector y no para la tarjeta por tanto al ejecutar pkcs11-tool --module /usr/lib/bit4id/libbit4npki.so --list-slots respondía que podía reconocer al lector pero no la tarjeta:
Available slots:
Slot 0 (0x0): Identiv uTrust 2700 R Smart Card Reader [CCID Interface] (536915
(token not recognized)
2. La posible solución
Le indiqué a Claude AI que el tipo de tarjeta era G&D SmartCafe Expert 7 (JavaCard) según pscs_scan y me indicó que descargara los drivers de 64 bits de KPN (que es el distribuidor oficial de AET), los descomprimiera y los copiara a /usr/lib machacando los drivers antiguos de 32 bits.
#Paso 1 — Descargar el .deb para Ubuntu 22.04 de KPN (distribuidor oficial de AET)
cd /tmp
wget "https://certificaat.kpn.com/files/drivers/SafeSign/SafeSign IC Standard Linux 4.0.0.0-AET.000 ub2204 x86_64.deb" -O safesign4_ub2204.deb
#Paso 2 — Extraer solo la librería .deb sin instalar
dpkg-deb -x safesign4_ub2204.deb /tmp/safesign_extracted
# Ver dónde está la librería
find /tmp/safesign_extracted -name "libaetpkss*"
#Paso 3 — Copiar la librería al sistema
sudo cp /tmp/safesign_extracted/usr/lib/libaetpkss.so* /usr/lib/
sudo ldconfig
#Paso 4 — Verificar
pkcs11-tool --module /usr/lib/libaetpkss.so --list-slots
pkcs11-tool --module /usr/lib/libaetpkss.so --list-objects --type cert --login
Y si que funcinó ahora, me muestra correctamente
pkcs11-tool --module /tmp/safesign_extracted/usr/lib/libaetpkss.so --list-objects --type cert --login
Using slot 0 with a present token (0xcd01)
Logging in to "ACCV".
Please enter User PIN:
Certificate Object; type = X.509 cert
label: EPN1
subject: DN: CN=MI_NOMBRE MI_APELLIDO1 MI_APELLIDO2 - DNI 00000001X/serialNumber=00000001X, GN=MI_NOMBRE, SN=MI_APELLIDO1 MI_APELLIDO2, OU=CERTIFICADO ELECTRONICO DE EMPLEADO PUBLICO, O=AYUNTAMIENTO DEL BROSQUIL, C=ES
ID: 112233abcd44efgji6asdfsa121sdfsdfsdf
3. Instalar en chrome
Hay que tener en cuenta que al instalr libnss3-tools puede haber problema con cruce de depebndencias de 32 y 64 bits y si falla hay que preguntar a una IA como solucionarlo. Los paso que me indica Claude son:
# Instalar nss-tools si no lo tienes
sudo apt install libnss3-tools
# Localizar el perfil de Chrome
ls ~/.config/google-chrome/Default/
# o Chromium:
ls ~/.config/chromium/Default/
# Registrar el módulo
modutil -dbdir sql:$HOME/.config/google-chrome/Default \
-add "SafeSign ACCV" \
-libfile /usr/local/lib/libaetpkss.so -force
# Verificar
modutil -dbdir sql:$HOME/.config/google-chrome/Default -list
Después hay que reiniciar Chrome (y Brave si es el caso)
4. Instalar en Autofirma 1.9
Hay que entrar en Herramientas -> Preferencias -> (Tab) Almacenes de Claves -> Combo de Selección de tarjeta -> Agregar tarjeta
Y darle estos parametros:
Ahora se le da al botón conectar
Análogamente se haría para el DNIe donde se tendría que indicar la librería correcta
Ahora falta probarlo a ver si funciona, pues de momento no he podido firmar con autofirma con el certificado de tarjeta de la ACCV
Claude indica que con esta órden no debería dar problemas:
autofirma -Djava.security.debug=sunpkcs11 2>&1 | head -30
5. Instalar en Firefox
Hay que localizar el perfil en Firefox y registrar la libreria en él.Tal como vimos en el post anterior
Firefox puede tener vaios perfiles, por tanto debemos averiguar primero el perfil antes de listar los certificados:
El perfil puede estar en :
- ~/.mozilla/firefox/profiles.ini o también en:
- ~/snap/firefox/common/.mozilla/firefox/profiles.ini
Hacemos el cat al fichero correspondiente
cat ~/.mozilla/firefox/profiles.ini (o a ~/snap/firefox/common/.mozilla/firefox/profiles.ini)
Y devuelve (el marcado en azul es el correcto)
[Profile2]
Name=Default User
IsRelative=1
Path=e1p51k0o.Default User
Default=1
[Profile1]
Name=default
IsRelative=1
Path=35j7fxvk.default
[Profile0]
Name=default-release
IsRelative=1
Path=72s3mnjv.default-release-1588245081987
[General]
StartWithLastProfile=1
Version=2
Para registralo debemos apagar firefox, y si no estuvieramos en un snap haríamos
# Registrar (sustituye el nombre de tu perfil)
modutil -dbdir sql:"$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" \
-add "SafeSign ACCV" \
-libfile /usr/local/lib/libaetpkss.so -force
Y contesta
Module "SafeSign ACCV" added to database.
Pero como estamos en un snap debemos hacer:
pkill -f firefox
# Verificar que la copia en snap existe
ls -la $HOME/snap/firefox/common/lib/
# Si no está, copiarla
cp /usr/local/lib/libaetpkss.so $HOME/snap/firefox/common/lib/
# Eliminar el módulo registrado con la ruta incorrecta
modutil -dbdir "sql:$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" \
-delete "SafeSign ACCV" -force
# Añadirlo con la ruta dentro del snap
modutil -dbdir "sql:$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" \
-add "SafeSign ACCV" \
-libfile "$HOME/snap/firefox/common/lib/libaetpkss.so" -force
# Verificar
modutil -dbdir "sql:$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" -list
Probamos a ver si lo registrado
modutil -dbdir "sql:$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" -list
Y contesta:
Listing of PKCS #11 Modules
-----------------------------------------------------------
1. NSS Internal PKCS #11 Module
uri: pkcs11:library-manufacturer=Mozilla%20Foundation;library-description=NSS%20Internal%20Crypto%20Services;library-version=3.98
slots: 2 slots attached
status: loaded
slot: NSS Internal Cryptographic Services
token: NSS Generic Crypto Services
uri: pkcs11:token=NSS%20Generic%20Crypto%20Services;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203
slot: NSS User Private Key and Certificate Services
token: NSS Certificate DB
uri: pkcs11:token=NSS%20Certificate%20DB;manufacturer=Mozilla%20Foundation;serial=0000000000000000;model=NSS%203
2. DNIe
library name: /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
uri: pkcs11:library-manufacturer=OpenSC%20Project;library-description=OpenSC%20smartcard%20framework;library-version=0.25
slots: 1 slot attached
status: loaded
slot: Identiv uTrust 2700 R Smart Card Reader [CCID Interface] (536...
token:
uri: pkcs11:
3. SafeSign ACCV
library name: /usr/local/lib/libaetpkss.so
uri: pkcs11:library-manufacturer=A.E.T.%20Europe%20B.V.;library-description=Cryptographic%20Token%20Interface;library-version=3.0
slots: 5 slots attached
status: loaded
slot: Identiv uTrust 2700 R Smart Card Reader [CCID Interface] (536915
token: ACCV
uri: pkcs11:token=ACCV;manufacturer=A.E.T.%20Europe%20B.V.;serial=028D0037000D7613;model=19C41B06010D0000
slot: UNAVAILABLE 1
token:
uri: pkcs11:
slot: UNAVAILABLE 2
token:
uri: pkcs11:
slot: UNAVAILABLE 3
token:
uri: pkcs11:
slot: UNAVAILABLE 4
token:
uri: pkcs11:
-----------------------------------------------------------
Y parece que está bien y tenemos que parar y arrancar Firefox.
Si queremos comprobar más, podemos listar los "nick names" de los certificados de la tarjeta y nos pide la contraseña:
certutil -L \
-d "sql:$HOME/snap/firefox/common/.mozilla/firefox/e1p51k0o.Default User" \
-h "ACCV"
Y nos muestra: el nick ACCV:EPN1
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Enter Password or Pin for "ACCV":
ACCV:EPN1 u,u,u
Ahora debemos conectarnos a un web que pida autenticación por certificado a ver si puede ver el certificado.