ctt-gob-es / clienteafirma

Cliente @firma
http://administracionelectronica.gob.es/ctt/clienteafirma
253 stars 119 forks source link

Graves problemas de usabilidad en Debian Bookworm (testing) #234

Open BatchDrake opened 2 years ago

BatchDrake commented 2 years ago

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:

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.

BatchDrake commented 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.

BatchDrake commented 1 year ago

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'