Verificar Firma Digital con DNIe
Buenas, estoy haciendo una aplicación Java que permite la firma digital con DNIe.
El problema que tengo es el siguiente, como sabreis el DNIe tiene dos certificados, uno para autenticación y otro para firma (con el bit de no Repudio activo).
Pues bien si yo realizo una firma digital con el certificado de firma, cuando a traves de Java verifico dicha firma con el siguiente código:
PKCS7 pkcs7 = new PKCS7(Base64.decode(firma));
SignerInfo[] si = null;
si = pkcs7.verify(texto.getBytes());
Obtengo el siguiente error: Key usage restricted: cannot be used for digital signatures
Si en vez de usar el de firma, uso el certificado de autentificación no obtengo ningún error y la firma se verifica correctamente.
Lo mas raro es que el código de verificación que empleo funciona perfectamente para verificar, por ejemplo, firmas digitales creadas con certificados de la FNMT o de CAGVA.
¿Teneís alguna idea de cual puede ser el problema? La verdad es que no entiendo como no puedo verificar la firma realizada con el certificado de firma, y si puedo verificar la firma con el certificado de autenticación (que según la propia web de dnielectronico.es) no se puede usar para firmar

- 1795 lecturas
Twitter

Verficación DNIe.
Si lo que quieres es autenticar a usuarios, puedes utilizar la herramienta FrontDNI, que te puedes descargar de forma gratuita desde:
http://www.isigma.es/esp/index.php?id=productos.php
Certificado de firma
Hola Turcan,
El problema se encuentra en la librerías del JCE. Presumimos que el problema como bien indica java es:
Key usage restricted: cannot be used for digital signatures
El certificado de autenticación tiene como keyUsage el atributo 'digitalSignature' que java entiende perfectamente que es para crear firmas digitales, en cambio, el certificado de Firma del DNIe tiene como keyUsage el atributo 'Non Repudiation' y java no entiende que este atributo también es para crear firmas digitales.
Espero que te haya aclarado la duda.
--
Servicio técnico de C3PO