ctt-gob-es / clienteafirma

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

Soporte nativo del nuevo CA de componentes para DNIe 3.0 #145

Open 2opremio opened 3 years ago

2opremio commented 3 years ago

https://github.com/ctt-gob-es/jmulticard/blob/master/jmulticard/src/main/java/es/gob/jmulticard/card/dnie/DnieCwa14890Constants.java solo contiene soporte para el certificado raiz antiguo y no el que se está utilizando actualmente para expedir DNIe (AC RAIZ COMPONENTES 2)

Más contexto en https://github.com/OpenSC/OpenSC/pull/2109

clawgrip commented 3 years ago

Muchas gracias. ¿Tiene un DNIe emitido con la nueva CA y le está dando errores? ¿podría por favor ejecutar la prueba unitaria "testDnieSign()" y copiar el error? (necesitará poner su PIN en el código y comentar el Ignore de JUnit).

¡Gracias de nuevo!

2opremio commented 3 years ago

No he compilado máster. Estoy usando 1.6.5 .

2opremio commented 3 years ago

El error que da es que no puede verificar los certificados. Luego lo pego.

2opremio commented 3 years ago

Aquí están los logs:

$ /Applications/AutoFirma.app/Contents/Resources/Home/bin/AutoFirma -Xms1024M -Xmx2048M  -Dcom.apple.macos.useScreenMenuBar=true -Xdock:name=AutoFirma -Xdock:icon=/Applications/AutoFirma.app/Contents/Resources/JAR/afirma.icns -Djava.library.path=/Applications/AutoFirma.app/Contents/Resources/JAR -jar /Applications/AutoFirma.app/Contents/Resources/JAR/Autofirma.jar
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.ProxyUtil clearJavaProxy
INFO: No se usara Proxy para las conexiones de red
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by es.gob.afirma.standalone.SimpleAfirma (file:/Applications/AutoFirma.app/Contents/Resources/JAR/AutoFirma.jar) to method com.apple.eawt.Application.getApplication()
WARNING: Please consider reporting this to the maintainers of es.gob.afirma.standalone.SimpleAfirma
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.SimpleAfirma main
INFO: No se buscaran nuevas versiones de la aplicacion
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.SimpleAfirma printSystemInfo
INFO: AutoFirma 1.6.5
Resolucion DPI de pantalla: 0
Sistema operativo: Mac OS X
Version del SO: 10.15.6
Version de Java: 11.0.2
Arquitectura del JRE: 64
Java Vendor: Oracle Corporation
Localizacion por defecto: en_ES
Tamano actual en memoria: 1024MB
Tamano maximo de memoria: 2048MB
Memoria actualmente libre: 976MB
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.SimpleAfirma main
INFO: Apertura como herramienta de escritorio
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.SimpleAfirma main
INFO: Cargando plugins
Sep 15, 2020 3:06:48 PM es.gob.afirma.standalone.SimpleAfirma main
INFO: Iniciando entorno grafico
Sep 15, 2020 3:06:53 PM es.gob.afirma.keystores.AOKeyStoreManager init
INFO: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF
Sep 15, 2020 3:06:53 PM es.gob.afirma.keystores.AOKeyStoreManagerHelperFullJava init
INFO: Cargando KeyStore 100% Java para DNIe y tarjetas FNMT-TIF
Sep 15, 2020 3:06:53 PM es.gob.jmulticard.card.dnie.DnieFactory getDnie
INFO: Detectado DNIe 3.0
Sep 15, 2020 3:06:53 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete
WARNING: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-06-82-EE
Sep 15, 2020 3:06:54 PM es.gob.afirma.keystores.AOKeyStoreManager getCertificate
SEVERE: Error intentando recuperar el certificado con el alias 'CertAutenticacion', se devolvera null: java.security.ProviderException: es.gob.jmulticard.card.CryptoCardException: Error en el establecimiento del canal seguro de PIN: es.gob.jmulticard.apdu.connection.ApduConnectionException: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80
Sep 15, 2020 3:06:54 PM es.gob.afirma.standalone.SimpleKeyStoreManager getKeyStore
SEVERE: No se ha podido inicializar el controlador 100% Java del DNIe: java.lang.NullPointerException
clawgrip commented 3 years ago

Gracias. La opción de usar el emisor del certificado de CA intermedia para el ICC, tal y como propone openSC no me gusta, deberíamos ser capaces de detectar directamente estos DNIe con nuevas jerarquías por el ATR, pero como el CNP no ha publicado esta información probablemente vayamos por el mismo camino...

2opremio commented 3 years ago

Vaya, asumía que estabais en contacto directo con la DGP.

Por cierto, tened en cuenta que, según entiendo, todos los DNIs nuevos usan este nuevo CA intermedio, así que supongo que esto debería tener prioridad alta.

clawgrip commented 3 years ago

En mi caso soy un particular que mantiene el proyecto JMultiCard (https://github.com/ctt-gob-es/jmulticard), y este es un error de este proyecto, y no tanto de AutoFirma. No tengo ninguna relación contractual con ningún gobierno para estos proyectos.

Gamuci commented 3 years ago

Desde el proyecto del Cliente @firma vamos a intentar ponernos en contacto con Policía, a ver si nos pueden proporcionar información oficial.

Muchas gracias por el aviso.

2opremio commented 3 years ago

Buena suerte. OpenSC y sus usuarios tienen suerte de que @rickyepoderi esté al pie del cañón haciendo ingeniería inversa.

Es un poco vergonzoso que la DGP no haga públicos los CA intermedios de componentes y más sorprendente aún que el equipo de Firma no esté al tanto del cambio (siendo, según entiendo, el cliente de firma oficial para plataformas no-Windows).

clawgrip commented 3 years ago

@2opremio Acabo de implementar la corrección (en JMultiCard, https://github.com/ctt-gob-es/jmulticard) y todo parece funcionar OK ¿Tú tienes DNIe con serie posterior a BMP100001 para probar?

2opremio commented 3 years ago

Sí, si que la tengo. Si me dices una manera sencilla de probarlo en macOS (por ejemplo me pasas un build, no tengo toolchain de Java instalado), lo pruebo y te digo.

czapir commented 3 years ago

Hola,

Me he encontrado con este mismo problema, y para probar, he descargado las versiones actuales (master) de "clienteafirma" y de "jmulticard", que incluye los cambios realizados tanto por @clawgrip como por @Gamuci en relación a los nuevos DNIe, según he podido ver en los commit. Después de compilar ambos proyectos (mvn install, etc), he podido lanzar AutoFirma.jar. Dispongo de varios DNIe con series distintas y estos son los resultados:

¿Hay alguien que haya podido firmar con un DNI > BMP100001? Y si es así, ¿me podría indicar cómo ha generado los programas, y si es necesario algo más?

Mis pruebas han sido hechas en Linux - Ubuntu 20.04. Si es necesario puedo aportar más información sobre el uso del programa.

Gracias!

czapir commented 3 years ago

Decir que en Windows, curiosamente con la última versión oficial (v1.6.5) de 2019, la firma sí funciona, con un DNI con serie posterior a BMP100001.

flozano commented 3 years ago

Buenas, Tenía el mismo problema con la 1.6.5 en OS X, y compilando desde los repositorios master en su estado a día de hoy, la firma electrónica parece funcionar, aunque con algunos warnings:

INFO: Detectado DNIe 3.0
Dec 02, 2020 8:51:16 AM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete
WARNING: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Codigo de retorno: Parametro(s) incorrecto(s) P1-P2 (6B00), APDU de origen: 00-B0-06-F0-DE
Dec 02, 2020 8:51:16 AM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete
WARNING: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Codigo de retorno: Parametro(s) incorrecto(s) P1-P2 (6B00), APDU de origen: 00-B0-06-F0-DE
Dec 02, 2020 8:51:16 AM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete
WARNING: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Codigo de retorno: Parametro(s) incorrecto(s) P1-P2 (6B00), APDU de origen: 00-B0-06-F0-DE
Dec 02, 2020 8:51:16 AM es.gob.afirma.keystores.AggregatedKeyStoreManager addKeyStoreManager
INFO: El certificado de huella '4D956D9C26ABC0940B0F35607E5C9A9FFD39B3E8' se tomara unicamente del almacen preferente
Dec 02, 2020 8:51:16 AM es.gob.afirma.keystores.AggregatedKeyStoreManager addKeyStoreManager
INFO: El certificado de huella '80CBD46FD9EE68656F5CC2F15ABCC1DC866E8C17' se tomara unicamente del almacen preferente
Dec 02, 2020 8:51:16 AM es.gob.afirma.standalone.SimpleAfirma setKeyStoreManager
INFO: Establecido KeyStoreManager: Gestor de almacenes de claves DNIe y tarjetas FNMT-TIF con nombre DNIe y tarjetas FNMT-TIF
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Instalamos el proveedor de firma XML de Apache
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Se usara el proveedor 'ApacheXMLDSig': org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI
[Fatal Error] :1:1: Content is not allowed in prolog.
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Instalamos el proveedor de firma XML de Apache
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Se usara el proveedor 'ApacheXMLDSig': org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Instalamos el proveedor de firma XML de Apache
Dec 02, 2020 8:51:22 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Se usara el proveedor 'ApacheXMLDSig': org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI
Dec 02, 2020 8:51:29 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetCertificateChain
WARNING: No se ha podido cargar el certificado de la CA raiz: java.security.cert.CertificateException: Missing input stream
Dec 02, 2020 8:51:29 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetCertificateChain
WARNING: No se ha podido cargar el certificado de la CA raiz: java.security.cert.CertificateException: Missing input stream
Dec 02, 2020 8:51:29 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetCertificateChain
WARNING: No se ha podido cargar el certificado de la CA raiz: java.security.cert.CertificateException: Missing input stream
Dec 02, 2020 8:51:29 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetCertificateChain
WARNING: No se ha podido cargar el certificado de la CA raiz: java.security.cert.CertificateException: Missing input stream
Dec 02, 2020 8:51:32 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetEntry
WARNING: Se ha proporcionado un ProtectionParameter de tipo no soportado, se ignorara: NULO
Dec 02, 2020 8:51:32 AM es.gob.jmulticard.jse.provider.DnieKeyStoreImpl engineGetCertificateChain
WARNING: No se ha podido cargar el certificado de la CA raiz: java.security.cert.CertificateException: Missing input stream
Dec 02, 2020 8:51:32 AM es.gob.jmulticard.card.dnie.Dnie3 openSecureChannelIfNotAlreadyOpened
INFO: Canal seguro de PIN para DNIe establecido
Dec 02, 2020 8:51:38 AM es.gob.jmulticard.ui.passwordcallback.gui.DnieCacheCallbackHandler handle
INFO: Guardamos en cache la contrasena de la tarjeta
Dec 02, 2020 8:51:39 AM es.gob.jmulticard.card.dnie.Dnie3 openSecureChannelIfNotAlreadyOpened
INFO: Canal seguro de Usuario para DNIe establecido
[Fatal Error] :1:1: Invalid byte 1 of 1-byte UTF-8 sequence.
Dec 02, 2020 8:51:42 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Instalamos el proveedor de firma XML de Apache
Dec 02, 2020 8:51:42 AM es.gob.afirma.signers.xml.Utils installXmlDSigProvider
INFO: Se usara el proveedor 'ApacheXMLDSig': org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI
Dec 02, 2020 8:51:42 AM es.gob.afirma.core.misc.MimeHelper <init>
WARNING: No se pudo detectar el formato de los datos
Dec 02, 2020 8:51:42 AM es.gob.afirma.core.misc.MimeHelper <init>
WARNING: No se pudo detectar el formato de los datos

Ahora mi problema sería cómo generar el instalador .pkg para OS X, ya que solo veo la manera de generar los .jar - pero no el instalador completo.

Gamuci commented 3 years ago

Hola:

AutoFirma ya integra una versión de JMulticard compatible con los DNIe que se están expidiendo a día de hoy. Este cambio estará disponible en AutoFirma 1.7.

Como alternativa para le funcionamiento de AutoFirma 1.6.5, se puden instalar los últimos drivers del DNIe y desactivar en el panel de preferencias la opción de utilizar JMultiCard. Al desactivarla, la aplicación pasará a utilizar los drivers instalados en el equipo. @czapir, seguramente sea esto por lo que te esté funcionando.

@flozano, el instalador macOS de AutoFirma se genera con la aplicación Packages. Puedes encontrar el proyecto con los ficheros para generarlo en este directorio de GitHub. También hay un manual con la explicación de como actualizar el proyecto para generar el instalador. Puedes descargar la JRE de OpenJDK que quieras usar de alguna de las webs que la ofrecen ya compilada, como AdoptOpenJDK.

lepalom commented 3 years ago

@gamuci, y si queremos la versión de Linux, tenemos que esperar a que salga 1.7? Porque yo no sé como desactivar JMultiCard en Linux. Alguna idea?

eboukamza commented 3 years ago

@Gamuci, y si queremos la versión de Linux, tenemos que esperar a que salga 1.7? Porque yo no sé como desactivar JMultiCard en Linux. Alguna idea?

Es una opción en Herramientas>Preferencias pero a mí no me funcionó.

lepalom commented 3 years ago

@eboukamza Estamos hablando del aplicativo AutoFirma en GNU/Linux? Yo no veo ninguna opción de menu en esta aplicación.

eboukamza commented 3 years ago

@eboukamza Estamos hablando del aplicativo AutoFirma en GNU/Linux? Yo no veo ninguna opción de menu en esta aplicación.

También tienes el atajo Control + P

Screenshot from 2020-12-16 15-31-05

lepalom commented 3 years ago

imatge

El control+P funcionó

Gamuci commented 3 years ago

@lepalom, ¿qué distribución de Linux usas? Miraré por qué no se muestra la barra de menús.

lepalom commented 3 years ago

Vale, después de desactivar aquella opción tampoco funcionó:

SEVERE: Error intentando recuperar el certificado con el alias 'CertAutenticacion', se devolvera null: java.security.ProviderException: es.gob.jmulticard.card.CryptoCardException: Error en el establecimiento del canal seguro de PIN: es.gob.jmulticard.apdu.connection.ApduConnectionException: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal:

@Gamuci Utilizo Debian Buster amd64.

lepalom commented 3 years ago

@Gamuci y entorno Kde (Plasma) no Mate o Gnome

eboukamza commented 3 years ago

He conseguido firmar con el combo de desactivar el JMulticard y la opción firefox -P para borrar el segundo perfil en firefox que tenía.

@lepalom me seguía apareciendo ese error pero después me dejó firmar

lepalom commented 3 years ago

@eboukamza yo solo tengo un perfil.

Si intento firmar, me da un error, vuelvo a leer la tarjeta, me encuentra el certificado y me dice:

SEVERE: Error durante el proceso de firma: es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:206) at es.gob.afirma.standalone.ui.SignPanelSignTask.doSignature(SignPanelSignTask.java:232) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:99) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:60) at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:81) at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:194) ... 9 more Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at java.base/java.security.Signature$Delegate.chooseProvider(Signature.java:1284) at java.base/java.security.Signature$Delegate.engineInitSign(Signature.java:1354) at java.base/java.security.Signature.initSign(Signature.java:636) at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:78) ... 10 more

eboukamza commented 3 years ago

@eboukamza yo solo tengo un perfil.

Si intento firmar, me da un error, vuelvo a leer la tarjeta, me encuentra el certificado y me dice:

SEVERE: Error durante el proceso de firma: es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:206) at es.gob.afirma.standalone.ui.SignPanelSignTask.doSignature(SignPanelSignTask.java:232) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:99) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:60) at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:81) at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:194) ... 9 more Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at java.base/java.security.Signature$Delegate.chooseProvider(Signature.java:1284) at java.base/java.security.Signature$Delegate.engineInitSign(Signature.java:1354) at java.base/java.security.Signature.initSign(Signature.java:636) at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:78) ... 10 more

puede ser un problema con tu DNIe? clave introducida tres veces mal o falta de certificados?

lepalom commented 3 years ago

@eboukamza

puede ser un problema con tu DNIe? clave introducida tres veces mal o falta de certificados?

No lo sé. Yo lo utilizo para hacer trámites administrativos, como entrar en el Ayuntamiento o Salud y funciona. Estoy esperando con candeletas 1.7 para ver que.

juanjosepablos commented 3 years ago

@eboukamza He probado tu solución temporal y no me funciona. Windows 7 64Bits Autofirma 1.6.5 DNI 14.1.0 DNI BNExxxxxx He desactivado la opción de JMuticard Simplemente con este DNI al arrancar autofirma y pulsar "Continuar con DNIe"

Pero me da un error "No ha sido posible inicializar su DNIe; Se continua con el almacén por defecto del sistema" En el log .afirma\AUTOFIRMA.afirma.log.xml

Error intentando recuperar el certificado con el alias 'CertAutenticacion', se devolvera null: java.security.ProviderException: es.gob.jmulticard.card.CryptoCardException: Error en el establecimiento del canal seguro de PIN: es.gob.jmulticard.apdu.connection.ApduConnectionException: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80:

Gamuci commented 3 years ago

Gracias, @junajosepablos, tu explicación me ha recordado que no expliqué algo importante.

Cuando aparece la pantalla de inicio de AutoFirma y se nos permite elegir entre las opciones "Continuar con DNIe" y "Usar cualquier certificado", debemos seleccionar "Usar cualquier certificado".

La opción "Continuar con DNIe" hace que AutoFirma cargue la biblioteca JMulticard para cargar únicamente los certificados del DNIe. Sin embargo, es el uso de JMulticard lo que justamente queremos evitar.

La opción "Usar cualquier certificado" hace que AutoFirma cargue el almacén de certificados del sistema, lo que incluye los certificados de las tarjetas inteligentes que tengamos disponibles. En este caso, los certificados del DNIe se cargarán mediante JMulticard, si tenemos activada la opción de usarlo, o mediante el driver de Policía, si se desactivó el uso de JMulticard como habíamos comentado.

En el caso de la invocación de AutoFirma desde el navegador no ocurre este problema, ya que en ningún caso se carga sólo JMulticard. Siembre se accede al almacén del navegador y se utiliza JMulticard sólo si está habilitado su uso en el panel de preferencias.

lepalom commented 3 years ago

Genial @Gamuci , pero sigue fallando en GNU/Linux. Si que consigo seguir con los pasos y leer la tarjeta, seleccionar el certificado SIG, pero, cuando intento firmar da este error:

DISABLED due to legacy de des. 18, 2020 9:22:46 A. M. es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init INFO: El almacen externo 'DNIe PKCS#11' ha podido inicializarse, se anadiran sus entradas y se detiene la carga del resto de almacenes de des. 18, 2020 9:22:49 A. M. es.gob.afirma.signers.cades.CAdESUtils generateSignerInfo INFO: Se ha seleccionado la generacion de CAdES para inclusion en PAdES de des. 18, 2020 9:22:49 A. M. es.gob.afirma.standalone.ui.SignPanelSignTask doSignature SEVERE: Error durante el proceso de firma: es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:206) at es.gob.afirma.standalone.ui.SignPanelSignTask.doSignature(SignPanelSignTask.java:232) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:99) at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:60) at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:81) at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:194) ... 9 more Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey at java.base/java.security.Signature$Delegate.chooseProvider(Signature.java:1284) at java.base/java.security.Signature$Delegate.engineInitSign(Signature.java:1354) at java.base/java.security.Signature.initSign(Signature.java:636) at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:78) ... 10 more

juanjosepablos commented 3 years ago

Gracias @Gamuci. Ahora con estas instrucciones puedo firmar documentación con el DNI. Pero a la hora de firmar desde Firefox 69.0esr da un error de contraseña el DNI BNExxxxxx. pero uno anterior BAMxxxxxx si funciona. El error me da al solicitar un certificado de persona fisica en www.cert.fnmt.es Y no, no es por que pongas mal la contraseña, antes de iniciar la firma en Opciones > Seguridad > Dispositivos de seguridad> DNI PKCS#11 he iniciado session correctamente.

gracias al enlace de @2opremio. He conseguido Firmar con el DNI BNExxxxxx. Usando Ubuntu + FireFirma + opensc-pkcs11-dnie + Autofirma 1.6.5

AlvaroPascual commented 3 years ago

Edito con como lo solucioné y dejo debajo lo que me pasaba por si a alguien le sirve para algo: Desactivando el JMulticard seguía sin funcionarme, pero al borrar el 2º perfil que tenía en Firefox (/usr/bin/firefox -p), como dice @eboukamza, me ha empezado a funcionar, tanto desde la aplicación como desde Firefox. Gracias!

Hola He caído aquí después de mucho buscar solución a mi problema y creo que este es exactamente el problema que tengo, pero no acabo de conseguir hacer el truco que comentáis para conseguir firmar. Tengo un DNIe BMRxxxxxx. Con Ubuntu y el módulo libpkcs11-dnie en Firefox puedo acceder sin problema a los certificados y loguearme en las páginas que piden el certificado, pero no consigo firmar con autofirma ni desde Firefox ni desde la propia aplicación AutoFirma. Usando autofirma desde Firefox me dice que no se encuentra certificado y deja esto en el fichero de log: `

2021-01-27T19:56:13 1611773773638 17 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS 21 Configuracion de NSS para SunPKCS11: name=NSSCrypto-AFirma library=/usr/lib/thunderbird/libsoftokn3.so attributes=compatibility slot=2 showInfo=false allowSingleThreadedModules=true nssArgs="configdir='USERHOME/.mozilla/firefox/jzn76vx0.default' certPrefix='' keyPrefix='' flags='readOnly'"

2021-01-27T19:56:13 1611773773655 18 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8 21 NSS necesita una precarga o tratamiento de sus dependencias: java.lang.reflect.InvocationTargetException 2021-01-27T19:56:13 1611773773668 19 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS 21 Proveedor PKCS#11 para NSS anadido: SunPKCS11-NSSCrypto-AFirma 2021-01-27T19:56:13 1611773773678 20 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules 21 Se incluiran los modulos nativos de DNIe/CERES si se encuentran configurados 2021-01-27T19:56:13 1611773773747 21 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules 21 Obtenidos los modulos externos de Mozilla desde 'secmod.db' 2021-01-27T19:56:13 1611773773749 22 es.gob.afirma INFO es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init 21 No se han encontrado modulos PKCS#11 externos instalados en Firefox 2021-01-27T19:56:13 1611773773750 23 es.gob.afirma INFO es.gob.afirma.standalone.protocol.ProtocolInvocationLauncherSelectCert processSelectCert 21 Obtenido gestor de almacenes de claves: Gestor de almacenes de claves Mozilla / Firefox (unificado) con nombre Mozilla / Firefox (unificado) 2021-01-27T19:56:17 1611773777920 24 es.gob.afirma SEVERE es.gob.afirma.ui.core.jse.JSEUIManager showCertificateSelectionDialog 21 Se genero un error en el dialogo de seleccion de certificados: java.lang.reflect.InvocationTargetException 2021-01-27T19:56:17 1611773777922 25 es.gob.afirma SEVERE es.gob.afirma.standalone.protocol.ProtocolInvocationLauncherSelectCert processSelectCert 21 No hay certificados validos en el almacen: es.gob.afirma.keystores.AOCertificatesNotFoundException: No se han encontrado certificados validos en el almacen 2021-01-27T19:56:20 1611773780207 26 es.gob.afirma SEVERE es.gob.afirma.standalone.protocol.ProtocolInvocationLauncherErrorManager showError 21 Ha ocurrido un error realizando la operación. (SAF_19: No hay ningun certificado válido en su almacén. Compruebe las fechas de caducidad e instale un certificado válido.) ` Mientras que si lo hago desde la propia aplicación, habiéndola configurado previamente desmarcando "habilitar JMulticard" y con el botón "Usar cualquier certificado", en un principio no me hace nada y cuando voy a firmar algo me sale la ventanita de siempre diciendo que no se ha encontrado un certificado válido. Y en el log algo parecido: ` 2021-01-27T19:41:27 1611772887503 11 es.gob.afirma INFO es.gob.afirma.standalone.SimpleAfirma setKeyStoreManager 1 Establecido KeyStoreManager: Gestor de almacenes de claves Mozilla / Firefox (unificado) con nombre Mozilla / Firefox (unificado) 2021-01-27T19:41:27 1611772887506 12 es.gob.afirma INFO es.gob.afirma.standalone.SimpleAfirma main 1 Cargando plugins 2021-01-27T19:41:27 1611772887516 13 es.gob.afirma INFO es.gob.afirma.standalone.SimpleAfirma main 1 Iniciando entorno grafico 2021-01-27T19:43:00 1611772980162 14 es.gob.afirma SEVERE es.gob.afirma.ui.core.jse.JSEUIManager showCertificateSelectionDialog 31 Se genero un error en el dialogo de seleccion de certificados: java.lang.reflect.InvocationTargetException 2021-01-27T19:43:00 1611772980163 15 es.gob.afirma SEVERE es.gob.afirma.standalone.ui.SignPanelSignTask doSignature 31 El almacen no contiene ningun certificado que se pueda usar para firmar: es.gob.afirma.keystores.AOCertificatesNotFoundException: No se han encontrado certificados validos en el almacen ` No se si me falta algo, si alguien me puede echar una mano ... Todo esto me funcionaba sin problema hasta que renové el DNI (antes ya tenía uno 3.0 pero de la serie BLZ...)
paubach commented 3 years ago

Hola!

Soy un simple usuario que intenta usar las herramientas que el estado nos obliga a usar (por falta de una mejor descripción de la situación).

Y me encuentro que las herramientas no funcionan como sería de esperar. Para usar AutoFirma con el DNIe en linux (yo uso Fedora) al parecer es necesario regresar a la versión 8 de Java (vamos por la 15). Aún regresando a la versión 8, hay que dar no sé qué orden (está documentado por aquí en el GitHub) para conseguir que el applet funcione en Firefox, y además se tiene que eliminar uno de los perfiles de Firefox... es que tiene tela la cosa!

Hasta ahí, es algo realmente indignante pero tolerable.

Pero es que si necesito firmar un archivo al margen del navegador, resulta que no puedo usar AutoFirma! Y la mejor respuesta que recibimos es que todos los errores que tiene AutoFirma quedarán resueltos en la versión 1.7.

Esa respuesta sería aceptable si mientras tanto pudiéramos tener una forma de hacer que AutoFirma funcione. Pero lo cierto es que estamos perdiendo el tiempo intentando que AutoFirma funcione en nuestros ordenadores cumpliendo con lo que nos obliga el estado. Yo uso la última versión de Fedora en 64 bits, y no logro entender cómo es posible que se tolere una situación en la que el servicio simplemente no va.

Si la solución ya la tienen, pues que se publique la versión 1.7 YA!

Y si todavía no está previsto que se publique la versión 1.7 hasta por lo menos dentro de una semana, pues que publiquen una versión de resolución de errores 1.6.6!

Sería lo mínimo! No puede ser que una nueva versión mayor sea una resolución de errores de la versión anterior. Los errores se tienen que quedar resueltos en las versiones que correspondan. Las versiones mayores se supone que aportan nuevas funcionalidades.

¿O es que se supone que de alguna forma tenemos que provisionarnos con el DNIe de otro certificado (de la FNMT, por ejemplo) y entonces usar AutoFirma con el certificado de la FNMT?

Por lo menos dígannos una solución!

lepalom commented 3 years ago

Puedes utilizar libreoffice para firmar documentos. De todas manera, creo que tienes razón y es bastante frustrante.

damosvil commented 3 years ago

Hola, ¿hay alguna idea aproximada de cuándo se va a solucionar esta incidencia? Ejecutando Autofirma desde Windows 7 me sale el error "No ha sido podible iniciar su DNIe". Ejecutando AutoFirma desde consola en Ubuntu 20.04 me sale el mismo error y en la consola aparece esto: utoFirma feb 02, 2021 6:25:58 PM es.gob.afirma.standalone.ProxyUtil clearJavaProxy INFORMACIÓN: No se usara Proxy para las conexiones de red feb 02, 2021 6:25:58 PM es.gob.afirma.standalone.SimpleAfirma main INFORMACIÓN: No se buscaran nuevas versiones de la aplicacion feb 02, 2021 6:25:58 PM es.gob.afirma.standalone.SimpleAfirma printSystemInfo INFORMACIÓN: AutoFirma 1.6.5 Resolucion DPI de pantalla: 0 Sistema operativo: Linux Version del SO: 5.9.15-050915-generic Version de Java: 1.8.0_275 Arquitectura del JRE: 64 Java Vendor: Private Build Localizacion por defecto: es_ES Tamano actual en memoria: 232MB Tamano maximo de memoria: 3440MB Memoria actualmente libre: 165MB feb 02, 2021 6:25:58 PM es.gob.afirma.standalone.SimpleAfirma main INFORMACIÓN: Apertura como herramienta de escritorio SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. feb 02, 2021 6:25:58 PM es.gob.afirma.standalone.SimpleAfirma main INFORMACIÓN: Se intenta una precarga temprana de NSS feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNSS INFORMACIÓN: Configuracion de NSS para SunPKCS11: name=NSSCrypto-AFirma library=/usr/lib/thunderbird/libsoftokn3.so attributes=compatibility slot=2 showInfo=false allowSingleThreadedModules=true nssArgs="configdir='sql:/USERHOME/.mozilla/firefox/mzrir7gh.default' certPrefix='' keyPrefix='' flags='readOnly'" feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8 INFORMACIÓN: NSS necesita una precarga o tratamiento de sus dependencias: java.lang.reflect.InvocationTargetException feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities loadNssJava8 ADVERTENCIA: Ha fallado el segundo intento de carga de NSS: java.lang.reflect.InvocationTargetException feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.mozilla.NssKeyStoreManager getNssProvider GRAVE: Error obteniendo el proveedor NSS: java.lang.reflect.InvocationTargetException java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.loadNssJava8(MozillaKeyStoreUtilities.java:680) at es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities.loadNSS(MozillaKeyStoreUtilities.java:727) at es.gob.afirma.keystores.mozilla.NssKeyStoreManager.getNssProvider(NssKeyStoreManager.java:122) at es.gob.afirma.keystores.mozilla.NssKeyStoreManager.init(NssKeyStoreManager.java:59) at es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager.init(MozillaUnifiedKeyStoreManager.java:72) 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:646) Caused by: java.security.ProviderException: Initialization failed at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:387) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:107) ... 13 more Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: 0xCE534351 at sun.security.pkcs11.wrapper.PKCS11.C_Initialize(Native Method) at sun.security.pkcs11.wrapper.PKCS11$SynchronizedPKCS11.C_Initialize(PKCS11.java:1627) at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKCS11.java:163) at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:341) ... 14 more

feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.AOKeyStoreManager init INFORMACIÓN: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF feb 02, 2021 6:25:58 PM es.gob.afirma.keystores.AOKeyStoreManagerHelperFullJava init INFORMACIÓN: Cargando KeyStore 100% Java para DNIe y tarjetas FNMT-TIF feb 02, 2021 6:25:58 PM es.gob.jmulticard.card.dnie.DnieFactory getDnie INFORMACIÓN: Detectado DNIe 3.0 feb 02, 2021 6:25:59 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete ADVERTENCIA: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-07-70-B5 feb 02, 2021 6:25:59 PM es.gob.afirma.keystores.AOKeyStoreManager getCertificate GRAVE: Error intentando recuperar el certificado con el alias 'CertAutenticacion', se devolvera null: java.security.ProviderException: es.gob.jmulticard.card.CryptoCardException: Error en el establecimiento del canal seguro de PIN: es.gob.jmulticard.apdu.connection.ApduConnectionException: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80 feb 02, 2021 6:25:59 PM es.gob.afirma.keystores.KeyStoreUtilities addPreferredKeyStoreManagers INFORMACIÓN: No se ha encontrado un DNIe: java.lang.NullPointerException feb 02, 2021 6:25:59 PM es.gob.afirma.keystores.AOKeyStoreManager init INFORMACIÓN: Inicializamos el almacen de tipo: Tarjeta FNMT-RCM CERES 4.30 o superior feb 02, 2021 6:25:59 PM es.gob.afirma.keystores.AOKeyStoreManagerHelperFullJava init INFORMACIÓN: Cargando KeyStore 100% Java para Tarjeta FNMT-RCM CERES 4.30 o superior feb 02, 2021 6:25:59 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete ADVERTENCIA: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-06-82-EE feb 02, 2021 6:25:59 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete ADVERTENCIA: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-07-70-CA feb 02, 2021 6:25:59 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete ADVERTENCIA: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-07-70-B5 feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.KeyStoreUtilities addPreferredKeyStoreManagers INFORMACIÓN: No se ha encontrado una tarjeta CERES 4.30 o superior: es.gob.jmulticard.card.InvalidCardException: Se esperaba una tarjeta de tipo 'CERES' pero se encontro otra con ATR=3B7F960000006A444E4965200101550421039000 feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.AOKeyStoreManager init INFORMACIÓN: Inicializamos el almacen de tipo: Tarjeta FNMT-RCM CERES feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.KeyStoreUtilities addPreferredKeyStoreManagers INFORMACIÓN: No se ha encontrado una tarjeta CERES: java.security.ProviderException: No se ha podido conectar con la tarjeta CERES: es.gob.jmulticard.card.InvalidCardException: Se esperaba una tarjeta de tipo 'CERES' pero se encontro otra con ATR=3B7F960000006A444E4965200101550421039000 feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules INFORMACIÓN: Se incluiran los modulos nativos de DNIe/CERES si se encuentran configurados feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules GRAVE: No se han podido obtener los modulos externos de Mozilla desde 'pkcs11.txt': java.io.FileNotFoundException: /home/blue/.mozilla/firefox/mzrir7gh.default/pkcs11.txt (Permiso denegado) feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.mozilla.MozillaKeyStoreUtilities getMozillaPKCS11Modules GRAVE: No se han podido obtener los modulos externos de Mozilla desde 'secmod.db': es.gob.afirma.core.AOException: El directorio del perfil de Mozilla proporcionado no contiene una base de datos de modulos (secmod.db) feb 02, 2021 6:26:00 PM es.gob.afirma.keystores.mozilla.MozillaUnifiedKeyStoreManager init INFORMACIÓN: No se han encontrado modulos PKCS#11 externos instalados en Firefox feb 02, 2021 6:26:00 PM es.gob.afirma.standalone.SimpleAfirma setKeyStoreManager INFORMACIÓN: Establecido KeyStoreManager: Gestor de almacenes de claves Mozilla / Firefox (unificado) con nombre Mozilla / Firefox (unificado) feb 02, 2021 6:26:00 PM es.gob.afirma.standalone.SimpleAfirma main INFORMACIÓN: Cargando plugins feb 02, 2021 6:26:00 PM es.gob.afirma.standalone.SimpleAfirma main INFORMACIÓN: Iniciando entorno grafico feb 02, 2021 6:26:02 PM es.gob.afirma.keystores.AOKeyStoreManager init INFORMACIÓN: Inicializamos el almacen de tipo: DNIe y tarjetas FNMT-TIF feb 02, 2021 6:26:02 PM es.gob.afirma.keystores.AOKeyStoreManagerHelperFullJava init INFORMACIÓN: Cargando KeyStore 100% Java para DNIe y tarjetas FNMT-TIF feb 02, 2021 6:26:02 PM es.gob.jmulticard.card.dnie.DnieFactory getDnie INFORMACIÓN: Detectado DNIe 3.0 feb 02, 2021 6:26:02 PM es.gob.jmulticard.card.iso7816four.Iso7816FourCard readBinaryComplete ADVERTENCIA: Se ha intentado una lectura fuera de los limites del fichero, se devolvera lo leido hasta ahora: es.gob.jmulticard.card.iso7816four.OffsetOutsideEfException: Parametro(s) incorrecto(s) P1-P2 (6B00). APDU de origen: 00-B0-07-70-B5 feb 02, 2021 6:26:03 PM es.gob.afirma.keystores.AOKeyStoreManager getCertificate GRAVE: Error intentando recuperar el certificado con el alias 'CertAutenticacion', se devolvera null: java.security.ProviderException: es.gob.jmulticard.card.CryptoCardException: Error en el establecimiento del canal seguro de PIN: es.gob.jmulticard.apdu.connection.ApduConnectionException: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: Error al verificar la cadena de certificados del controlador: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado de la CA intermedia de Terminal: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80: es.gob.jmulticard.apdu.connection.cwa14890.SecureChannelException: Error en la verificacion del certificado. Se obtuvo el error: 6A-80 feb 02, 2021 6:26:03 PM es.gob.afirma.standalone.SimpleKeyStoreManager getKeyStore GRAVE: No se ha podido inicializar el controlador 100% Java del DNIe: java.lang.NullPointerException

paubach commented 3 years ago

Pues en realidad con LibreOffice también hay bastantes problemas para poder hacer un firmado digital en condiciones.

Finalmente he conseguido firmar documentos con una herramienta de 2018. Dos mil dieciocho!!! http://www.sinadura.net/es/

Se les debería caer la cara de vergüenza.

Puedes utilizar libreoffice para firmar documentos. De todas manera, creo que tienes razón y es bastante frustrante.

lepalom commented 3 years ago

@paubach sí es cierto que no es fácil el tema de la firma a nivel usuario. Tampoco entiendo por qué es tan difícil. Pero me parece descortés y fuera de lugar acusar al equipo de desarrolladores que de no tener vergüenza. A lo mejor, tú sabes más de las interioridades del desarrollo, pero por lo que yo sé parece bastante voluntariado o con pocos recursos. Al menos para las versiones MacOs i GNU/Linux.

Por otra parte espero que algún día alguien me explique la razón de utilizar java para este tipo de desarrollos.

flozano commented 3 years ago

^^ coincido en lo que dices de inicio, pero no veo el problema de usar Java. Que no te guste no significa que no sea la herramienta adecuada.

lepalom commented 3 years ago

@flozano No es un tema de gustos. Mi pregunta es por qué es un lenguaje adecuado. Qué aporta de más?

paubach commented 3 years ago

Descortés? Al contrario. Quien se sienta aludid@ por algo será. Es una herramienta que el estado obliga a usar. Y que el estado desarrolla. Quien debe sentir vergüenza y por lo tanto darse por aludid@, es quien tenga responsabilidades en el asunto. Quien no las tenga no tiene porqué sentirse aludid@.

En cuanto al uso de Java, imagino que es por todas las ventajas que aporta, que no son pocas en cuanto a portabilidad entre distintas plataformas. Razón de más para que sea injustificable la falta de soporte y funcionalidad para Linux.

@paubach sí es cierto que no es fácil el tema de la firma a nivel usuario. Tampoco entiendo por qué es tan difícil. Pero me parece descortés y fuera de lugar acusar al equipo de desarrolladores que de no tener vergüenza. A lo mejor, tú sabes más de las interioridades del desarrollo, pero por lo que yo sé parece bastante voluntariado o con pocos recursos. Al menos para las versiones MacOs i GNU/Linux.

Por otra parte espero que algún día alguien me explique la razón de utilizar java para este tipo de desarrollos.

jpc4242 commented 3 years ago

Bueno, después de echarle unas horas creo que he conseguido hacerlo funcionar (tengo un DNIe reciente con IDESP=BNZ1...) con estos pasos:

Y voilá! Ya puedo pulsar el botón de "continuar con DNIe", seleccionar fichero, elegir certificado (te ofrece el de autenticación y el de firma; yo usé el de firma), introducir el PIN, y decidir fichero de salida Espero que la receta le sirva a alguien.

Dicho lo cual: coincido con @paubach y me parece ABSOLUTAMENTE IMPRESENTABLE (puede que hasta denunciable) que las administraciones públicas me obliguen a usar una aplicación (autofirma) que tenga problemas de incompatibilidad con el DNIe que esas mismas administraciones me han proporcionado, y que 6 meses después de detectado el problema aún no esté resuelto. Entiendo perfectamente que los/las desarrolladores que leen estos issues no son los responsable de la situación, y hacen lo que pueden o más. Pero, por favor, escaladlo internamente a quien corresponda o dejad aquí una dirección a la que podamos quejarnos todos los afectados a ver si así se hace algo.

Y si hasta entonces pudieraís sacar (no se si lo permitirán) una release "no oficial" basada en los ultimos cambios de jmulticard, seguro que mucha gente lo agradecería.

atesteve commented 3 years ago

Añado a la solución aportada por @jpc4242 , para reconstruir el .jar y sustituirlo por el original (necesario para ejecutar autofirma desde el navegador), basta con copiar los nuevos ficheros por los antiguos dentro del jar (puede hacerse con el propio file-roller de GNOME), y hay que "desfirmar" el jar. Para desfirmarlo, hay que borrar los ficheros MINISTER.RSA y MINISTER.SF de META-INF, y hay que editar MANIFEST.MF y borrar todas las líneas con los digest SHA-256 (básicamente todas las líneas después de Main-Class: es.gob.afirma.standalone.SimpleAfirma)

ifelipem commented 3 years ago

Hola muy buenas a todos. A continuación describo como he conseguido que funcione correctamente el DNI 3.0 con Firefox, Autofirma dentro de Firefox o Autofirma standalone en modo app. Puedo autenticarme y firmar con mi DNI. He utilizado el DNIe para solicicar un certificado de la fnmt y todo ha ido a las mil maravillas. Lo voy a poner en modo guiaburros para que cualquiera pueda seguirlo. Quiero agradecer toda la info que he encontrado en esta página sin la cual no lo hubiera conseguido.

Entorno: Linux Firefox Autofirma 1.6.5

Lo primero arrancamos Autofirma, seleccionamos "continuar con cualquier certificado" Pulsamos ctrl-p (Yo no veo el menú herramientas) para entrar en las opciones y allí deshabilitamos la utilización de JMulticard Seleccionamos cualquier fichero pdf y pichamos en firmar... cuando lleguemos a la pantalla de selección del certificado evidentemente el dnie no aparecerá.

Peeero... Al haber tratado de firmar algo, hemos provocado una lectura de los certificados de sistema, así que en la consola donde arrancamos el Autofirma podremos ver una traza tal que así...

nssArgs="configdir='sql:/USERHOME/.mozilla/firefox/cf582qad.Vacio'

Ese es el perfil de firefox que autofirma va a utilizar para buscar nuestros certificados... cf582qad.Vacio es el mío... lo más habitual es que sea algo así como od234iddr.default

Así que ahora que ya sabeis el perfil lo primero que teneis que hacer es instalar el controlador PKCS11 del dnie de la dgp... lo podeis descargar desde la propia página del dnie yo por ejemplo me he descargado el paquete libpkcs11-dnie 1.6.1 disponible en Arch (es una copia del .deb para ubuntu de la página del dnie).

Chequeamos que tenemos el demonio de pcscd corriendo (esto depende de cada distribución) para asegurarnos de que funciona el lector de targetas. (systemcts enable pcscd.service en Arch)

Una vez instalado el módulo pkcs11 arrancamos firefox -p para que nos salga el selector de profiles Seleccionamos el profile que hemos visto en el primer paso que utilizaba la app Autofirma (El mío era "Vacio" aunque normalmente se llama "default") y vamos a configurar los dispositivos de seguridad disponibles para ese perfil...

Menú->Preferencias->Privacidad&seguridad->dispositivos de seguridad

Y aquí añadís el modulo del pkcs11 del dnie para ello pulsais en "cargar" a la derecha y cargais el módulo /usr/lib/libpkcs11-dnie.so dandole un nombre cualquiera (dnie3.0-dgp le he puesto yo)

Ahora podeis meter el dnie en el lector pinchar en Iniciar Sesión... con vuestro pin del dnie debería funcionar.

Y ya lo teneis... si usais normalmente otro perfil de firefox... cambiais de nuevo el perfil de firefox (firefox -p) e instalais en ese perfil el módulo de pkcs11 del dnie también.

Con esto ya os debería funcionar tanto en Firefox como en Autofirma como en Firefox+autofirma Autenticando y firmando.

No olvideis que siempre hay que seleccionar "continuar con cualquier certificado" para que lea los módulos pkcs11 del perfil de firefox en lugar de usar JMulticard

Espero que os funcione.....

akrogp commented 3 years ago

Gracias a todos, con los cambios que comenta @Hitoprl me ha funcionado tanto vía desktop como a través del navegador. Los pongo más detallados:

  1. Crear nuevo fichero de manifiesto AutoFirmaFixed.mf con el siguiente contenido:
    Manifest-Version: 1.0
    Implementation-Vendor: Gobierno de España
    Implementation-Title: es.gob.afirma
    Implementation-Version: build01
    Application-Name: AutoFirma
    Specification-Vendor: Gobierno de España
    Build-Jdk: 11.0.2
    Built-By: carlos.gamuci
    Permissions: all-permissions
    Specification-Title: AutoFirma
    Created-By: Apache Maven 3.6.0
    Specification-Version: 1.6.5
    Main-Class: es.gob.afirma.standalone.SimpleAfirma
  2. cd midirectorio
  3. rm META-INF/*.SF META-INF/*.RSA
  4. jar cfm ../AutoFirmaFixed.jar ../AutoFirmaFixed.mf *
  5. sudo cp ../AutoFirmaFixed.jar /usr/lib/AutoFirma/AutoFirma.jar
pr-apes commented 3 years ago

@2opremio, muchas gracias por la incidencia.

Sorprende ver que el desarrollo real del estándar de hecho de firma electrónica en España sea (al menos) tan accidentada.

He visto un error igual que el de @lepalom (también en la versión estable de Debian).

Además de que @albfernandez pueda actualizar su versión, tengo una pregunta para los expertos.

Debian estable ni siquiera instala opensc (instalado es la versión 0.19).

El error con AutoFirma es precisamente que no es capaz de gestionar la clave privada.

Mi pregunta entonces es: ¿no se solucionaría instalando opensc-0.21 en Debian?

Perdonad, ése me parece que es el sentido de OpenSC/OpenSC#2109.

pr-apes commented 3 years ago

@iso9660, a mí en Windows 7 también me daba error.

Instalé el último módulo criptográfico para ese sistema operativo (https://www.sede.fnmt.gob.es/descargas/descarga-software) y me ha funcionado perfectamente desde entonces.

Las versiones de los módulos son, en mi caso:

Prueba a actualizar, porque en Windows te debería funcionar sólo con eso.

lepalom commented 3 years ago

@pr-apes , yo he probado con un backport de opensc (0.21.0-1~bpo10+1) y no he conseguido que funciona en Debian stable (Buster). Y supongo que me hago viejo, pero ya no me sorprende nada de cómo funcionan la cosas en la administración pública cuando se trata de plataformas no Windows.

pr-apes commented 3 years ago

@lepalom, pues perdona, se ve que me equivoqué.

Parece que cuando hay problemas fuera de Windows. ni se notan en desarrollo.

Acabo de ver algo que lleva tiempo, depende dónde AutoFirma.jar puede llamarse como Autofirma.jar (el último que lo ha comentado es @jonsito en https://github.com/ctt-gob-es/clienteafirma/issues/51#issuecomment-834682230).

En Windows, ni se nota. En Unix puede hacer que no funcione nada (como comentan #42 y #182).

MPenaR commented 3 years ago

Hola muy buenas a todos. A continuación describo como he conseguido que funcione correctamente el DNI 3.0 con Firefox, Autofirma dentro de Firefox o Autofirma standalone en modo app. Puedo autenticarme y firmar con mi DNI. He utilizado el DNIe para solicicar un certificado de la fnmt y todo ha ido a las mil maravillas. Lo voy a poner en modo guiaburros para que cualquiera pueda seguirlo. Quiero agradecer toda la info que he encontrado en esta página sin la cual no lo hubiera conseguido.

Entorno: Linux Firefox Autofirma 1.6.5

Lo primero arrancamos Autofirma, seleccionamos "continuar con cualquier certificado" Pulsamos ctrl-p (Yo no veo el menú herramientas) para entrar en las opciones y allí deshabilitamos la utilización de JMulticard Seleccionamos cualquier fichero pdf y pichamos en firmar... cuando lleguemos a la pantalla de selección del certificado evidentemente el dnie no aparecerá.

Peeero... Al haber tratado de firmar algo, hemos provocado una lectura de los certificados de sistema, así que en la consola donde arrancamos el Autofirma podremos ver una traza tal que así...

nssArgs="configdir='sql:/USERHOME/.mozilla/firefox/cf582qad.Vacio'

Ese es el perfil de firefox que autofirma va a utilizar para buscar nuestros certificados... cf582qad.Vacio es el mío... lo más habitual es que sea algo así como od234iddr.default

Así que ahora que ya sabeis el perfil lo primero que teneis que hacer es instalar el controlador PKCS11 del dnie de la dgp... lo podeis descargar desde la propia página del dnie yo por ejemplo me he descargado el paquete libpkcs11-dnie 1.6.1 disponible en Arch (es una copia del .deb para ubuntu de la página del dnie).

Chequeamos que tenemos el demonio de pcscd corriendo (esto depende de cada distribución) para asegurarnos de que funciona el lector de targetas. (systemcts enable pcscd.service en Arch)

Una vez instalado el módulo pkcs11 arrancamos firefox -p para que nos salga el selector de profiles Seleccionamos el profile que hemos visto en el primer paso que utilizaba la app Autofirma (El mío era "Vacio" aunque normalmente se llama "default") y vamos a configurar los dispositivos de seguridad disponibles para ese perfil...

Menú->Preferencias->Privacidad&seguridad->dispositivos de seguridad

Y aquí añadís el modulo del pkcs11 del dnie para ello pulsais en "cargar" a la derecha y cargais el módulo /usr/lib/libpkcs11-dnie.so dandole un nombre cualquiera (dnie3.0-dgp le he puesto yo)

Ahora podeis meter el dnie en el lector pinchar en Iniciar Sesión... con vuestro pin del dnie debería funcionar.

Y ya lo teneis... si usais normalmente otro perfil de firefox... cambiais de nuevo el perfil de firefox (firefox -p) e instalais en ese perfil el módulo de pkcs11 del dnie también.

Con esto ya os debería funcionar tanto en Firefox como en Autofirma como en Firefox+autofirma Autenticando y firmando.

No olvideis que siempre hay que seleccionar "continuar con cualquier certificado" para que lea los módulos pkcs11 del perfil de firefox en lugar de usar JMulticard

Espero que os funcione.....

Buenas, estoy en Debian 11, con ésta solución fue la primera vez que vi que las cosas cambiaban. Al iniciar autofirma, antes de preguntarme si quiero usar el DNIe u otros certificados directamente ya me pide la contraseña del DNIe. Luego llega el menú en el que te pregunta si usar el DNIe u otros certificados y elijo otros certificados.

Tengo deshabilitado el JMulticard, selecciono un archivo, le pido que lo firme y ahora SI que me aparecen los dos certificados (de autentificación y de firma) del DNIe. Elijo el de firma pero me da error.

Tanto si tengo la sesión iniciada en dispositivos en firefox al mismo tiempo como si no, devuelve el siguiente error:

GRAVE: Error durante el proceso de firma: es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
es.gob.afirma.core.AOException: Error durante la firma PAdES: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
    at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:206)
    at es.gob.afirma.signers.pades.AOPDFSigner.cosign(AOPDFSigner.java:316)
    at es.gob.afirma.standalone.ui.SignPanelSignTask.doSignature(SignPanelSignTask.java:201)
    at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:99)
    at es.gob.afirma.standalone.ui.SignPanelSignTask.doInBackground(SignPanelSignTask.java:60)
    at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: es.gob.afirma.core.AOException: Error al inicializar la firma con la clave privada: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
    at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:81)
    at es.gob.afirma.signers.pades.AOPDFSigner.sign(AOPDFSigner.java:194)
    ... 10 more
Caused by: java.security.InvalidKeyException: No installed provider supports this key: sun.security.pkcs11.P11Key$P11PrivateKey
    at java.base/java.security.Signature$Delegate.chooseProvider(Signature.java:1284)
    at java.base/java.security.Signature$Delegate.engineInitSign(Signature.java:1354)
    at java.base/java.security.Signature.initSign(Signature.java:636)
    at es.gob.afirma.core.signers.AOPkcs1Signer.sign(AOPkcs1Signer.java:78)
    ... 11 more

Tengo instalado opensc y opensc-pkcs11

No sé que más puedo probar...

RyuKay24 commented 3 years ago

A mi esto me parece flipante, no soy capaz de hacerlo funcionar en linux ni para atrás... usando debian buster, recién instalado, kernel estable con paquetes mas que estables, y no hay manera, he probado a compilar y recompilar y nada... que pasa si no tengo recursos para comprar windows... que se supone que tengo que hacer para tan siquiera sacarme el certificado de la fnmt... ¿les paso la factura? ¿O si tengo que compilarlo, como se lo explico a una persona de 56 años sin conocimientos de informática?