Estoy intentando leer los datos públicos del DNI electrónico en Java accediendo a uno de sus certificados. Lo estoy haciendo en Windows, pero con la librería pkcs11 (UsrPkcs11.dll), que me descargué de la página oficial (
www.dnielectronico.es).
El código que utilizo para la configuración es éste:
String pkcs11config =
"name = DNIe\nlibrary =c:/WINDOWS/system32/UsrPkcs11.dll\nslot=1\nshowInfo=true\n";
InputStream confStream = new ByteArrayInputStream(pkcs11config.getBytes());
sunpkcs11 = new SunPKCS11(confStream);
Security.addProvider(sunpkcs11);
Y al ejecutar, primero da la siguiente información del proveedor al llegar a sunpkcs11 = new SunPKCS11(confStream):
Information for provider SunPKCS11-DNIe
Library info:
cryptokiVersion: 2.00
manufacturerID: FNMT-RCM
flags: 0
libraryDescription: Módulo CryptokiV3 DNI-e.
libraryVersion: 1.00
All slots: 1
Slots with tokens: 1
Slot info for slot 1:
slotDescription: C3PO LTC32 0
E inmediatamente salta el error:
java.security.ProviderException: Initialization failed
at sun.security.pkcs11.SunPKCS11.
(SunPKCS11.java:340)
at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:90)
at TestDnie.Test(TestDnie.java:34)
at TestDnie.main(TestDnie.java:54)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_TOKEN_NOT_RECOGNIZED
at sun.security.pkcs11.wrapper.PKCS11.C_OpenSession(Native Method)
at sun.security.pkcs11.SessionManager.openSession(SessionManager.java:188)
at sun.security.pkcs11.SessionManager.getOpSession(SessionManager.java:123)
at sun.security.pkcs11.Token.(Token.java:121)
at sun.security.pkcs11.SunPKCS11.initToken(SunPKCS11.java:764)
at sun.security.pkcs11.SunPKCS11.(SunPKCS11.java:331)
... 3 more
Si alguien puediera ayudarme le estaría agradecidísimo!! Un saludo!
Añadir Nuevo Comentario