Responder
Leer los datos públicos del DNI electrónico
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!
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.
at sun.security.pkcs11.SunPKCS11.
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.
at sun.security.pkcs11.SunPKCS11.initToken(SunPKCS11.java:764)
at sun.security.pkcs11.SunPKCS11.
... 3 more
Si alguien puediera ayudarme le estaría agradecidísimo!! Un saludo!