Open BatchDrake opened 2 years ago
Hola otra vez,
Refloto esta issue para comentar que, efectivamente, el correcto funcionamiento de AutoFirma no es reproducible, y tampoco es capaz de informar de los errores. Via strace
he podido ver que, por alguna razón, el demonio de pcscd
no se había arrancado. Tampoco sabe informar cuándo la contraseña es correcta (en realidad, para AutoFirma, todas las contraseñas son incorrectas, solo que hay una que te deja firmar). El DNI ha sido bloqueado, tocará perder tiempo yendo a la comisaría para cambiar la contraseña otra vez.
Refloto esta issue porque, ingenuo de mí, pensé que seguiría funcionando si no lo volvía a tocar. Error. Decido actualizar a AutoFirma 1.8. Error. Con la biblioteca de opensc para dnie (la que te bajas de https://www.dnielectronico.es/portaldnie/PRF1_Cons02.action?pag=REF_1112):
ADVERTENCIA: Ha fallado el segundo intento de inicializacion del PKCS#11 para la la biblioteca /usr/lib/libpkcs11-dnie.so
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.getP11ProviderJava9(AOKeyStoreManagerHelperPkcs11.java:214)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.getP11Provider(AOKeyStoreManagerHelperPkcs11.java:195)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.initPKCS11(AOKeyStoreManagerHelperPkcs11.java:101)
at es.gob.afirma.keystores.AOKeyStoreManager.init(AOKeyStoreManager.java:267)
at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.internalInitStore(MozillaUnifiedKeyStoreManager.java:197)
at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.init(MozillaUnifiedKeyStoreManager.java:142)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getNssKeyStoreManager(AOKeyStoreManagerFactory.java:511)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getMozillaUnifiedKeyStoreManager(AOKeyStoreManagerFactory.java:542)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getAOKeyStoreManager(AOKeyStoreManagerFactory.java:133)
at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:766)
Caused by: java.security.ProviderException: Initialization failed
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:395)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:115)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:112)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.configure(SunPKCS11.java:112)
... 14 more
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_CRYPTOKI_NOT_INITIALIZED
at jdk.crypto.cryptoki/sun.security.pkcs11.wrapper.PKCS11.C_GetSlotList(Native Method)
at jdk.crypto.cryptoki/sun.security.pkcs11.wrapper.PKCS11$SynchronizedPKCS11.C_GetSlotList(PKCS11.java:1645)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:367)
... 18 more
may. 18, 2023 8:29:59 P. M. es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init
ADVERTENCIA: No se ha podido inicializar el PKCS#11 'DNI-e' tras haberlo intentado dos veces: es.gob.afirma.keystores.AOKeyStoreManagerException: No se ha podido instanciar el proveedor SunPKCS11 para la la biblioteca '/usr/lib/libpkcs11-dnie.so': java.lang.reflect.InvocationTargetException, es.gob.afirma.keystores.AOKeyStoreManagerException: No se ha podido instanciar el proveedor SunPKCS11 para la la biblioteca '/usr/lib/libpkcs11-dnie.so': java.lang.reflect.InvocationTargetException
Con la de la distribución (opensc-pkcs11):
ADVERTENCIA: Ha fallado el segundo intento de inicializacion del PKCS#11 para la la biblioteca /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.getP11ProviderJava9(AOKeyStoreManagerHelperPkcs11.java:214)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.getP11Provider(AOKeyStoreManagerHelperPkcs11.java:195)
at es.gob.afirma.keystores.AOKeyStoreManagerHelperPkcs11.initPKCS11(AOKeyStoreManagerHelperPkcs11.java:101)
at es.gob.afirma.keystores.AOKeyStoreManager.init(AOKeyStoreManager.java:267)
at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.internalInitStore(MozillaUnifiedKeyStoreManager.java:197)
at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.init(MozillaUnifiedKeyStoreManager.java:130)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getNssKeyStoreManager(AOKeyStoreManagerFactory.java:511)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getMozillaUnifiedKeyStoreManager(AOKeyStoreManagerFactory.java:542)
at es.gob.afirma.keystores.AOKeyStoreManagerFactory.getAOKeyStoreManager(AOKeyStoreManagerFactory.java:133)
at es.gob.afirma.standalone.SimpleAfirma.main(SimpleAfirma.java:766)
Caused by: java.security.ProviderException: Initialization failed
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:395)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:115)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11$1.run(SunPKCS11.java:112)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.configure(SunPKCS11.java:112)
... 14 more
Caused by: java.security.ProviderException: slotListIndex is 0 but token only has 0 slots
at jdk.crypto.cryptoki/sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:376)
... 18 more
may. 18, 2023 8:30:52 P. M. es.gob.afirma.keystores.AOKeyStoreManager init
INFORMACIÓN: Inicializamos el almacen de tipo: PKCS#11
may. 18, 2023 8:30:52 P. M. es.gob.afirma.keystores.KeyStoreUtilities getLibraryPath
INFORMACIÓN: La ruta de la libreria '/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so' se interpretara como '/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so'
Hola,
Uso una Debian Bookworm (testing). Instalación nueva, sin casi nada salvo el Google Chrome y dos cosas más. Es enero de 2022 y AutoFirma sigue sin funcionar "tal cual" en Linux.
Si bien es cierto que se me puede reprochar estar usando Debian testing, hay ciertas cosas que no son achacables la distribución sino que son directamente problemas de AutoFirma. No hay ninguna (ninguna) razón por la que AutoFirma no deba poder funcionar a la primera: hay un lector que funciona, hay unos drivers que funcionan y hay un protocolo bien establecido Fin. A partir de aquí, todo lo que pase solo puede deberse a un bug de la aplicación.
Aunque finalmente lo he conseguido hacer funcionar, debo decir que no ha sido gracias a la documentación disponible. He tenido que realizar una larga secuencia de pruebas a ciegas imposibles de seguir por un usuario novel (y creo que dentro de lo que cabe, yo lo he tenido fácil, me ha parecido leer por ahí que alguien ha tenido que hacerle ingeniería inversa a la aplicación para hacerla funcionar).
Abro esta incidencia entonces por dos motivos: el primero, reportar la inexcusable inoperancia de la aplicación en su instalación por defecto, y el segundo enumerar todas las pruebas que hice antes de hacerlo funcionar. Porque creo que es tan bueno informar de lo que funcona como de lo que no funciona. En particular:
libpkcs11-dnie
de la web del ministerio (me ofrece usar DNI electrónico, pero da error al leer la PDU, se ha intentado leer más allá de los límites del fichero, no va)libpkcs11-dnie_1.6.8
a1.6.6
(no va)~/.pki/nssdb/pkcs11.txt
(no va)~/.pki/nssdb
por la que tenía en un disco duro viejo de una instalación aterior (no va)pkcs11.txt
para que utilice/usr/lib/libpkcs11-dnie.so
(tampoco va)opensc-pkcs11.so
enpkcs11.txt
(no va)Se ve que ahí hay un
pkcs11.txt
también! Lo modifico para que incluya la librería/usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
. Ahora AutoFirma me pide contraseña. Error de inicialización. Pero ahora me deja firmar. Conclusión: todo esto es culpa de la incapacidad del .deb de AutoFirma de detectar de qué depende y/o reportar al usuario qué se necesita poara que funcione.Como decía antes, esto no es propio de un software que se ha sacado a producción. Aplicaciones que no funcionan por defecto, errores poco informativos (con faltas de ortografía), confusión de directorios y procedimientos... nada de esto es necesario. ¿Tan difícil es saber qué ficheros son los que hay que modificar cuando se instala un .deb? ¿Por qué seguimos dependiendo de un navegador en concreto siquiera, si lo que yo quiero hacer es firmar documentos?
Edit: aprovecho para comentar que la mera dependencia de Firefox ya es de por sí un bug. No uso Firefox para nada, pero de algún modo AutoFirma insiste en preguntarle a Firefox dónde está libpkcs11.