Buenas,

Estoy realizando unas pruebas de concepto de CryptoApplet y no consigo listar 
un certificado almacenado en una tarjeta criptográfica bajo Firefox.

Estoy utilizando; 

 - la última versión de pruebas del applet (2.1.0)
  http://projectestic.uji.es/pr/cryptoapplet/samples/v2.1.0/test.html

 - Una tarjeta criptográfica Izenpe (funcioinal, lo he probado bajo IE6 
satisfactoriamente)

 - Firefox 3.6.13

 - JRE 1.6_20

 - De momento estoy intentando cargar el driver sin tenerlo asociando en el 
almacén del Firefox como dispositivo de seguridad por si pudiera dar problemas, 
es decir  lo cargo desde el propio Applet.

_______

Primero da la siguiente excepción
<pre>
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.JSCommands [16:41:41,600] - New access to browser 
window from Applet
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.SignatureApplet [16:41:41,697] - Nimbus Look&Feel 
loaded
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.AppHandler [16:41:41,719] - Recover JavaScript 
member: navigator
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.AppHandler [16:41:41,722] - Recover JavaScript 
member: userAgent
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.AppHandler [16:41:41,724] - Detected user agent 
mozilla/5.0 (x11; u; linux i686; es-es; rv:1.9.2.13) gecko/20101206 
ubuntu/10.04 (lucid) firefox/3.6.13
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.AppHandler [16:41:41,724] - Navigator variable set to 
MOZILLA
Borrar antememoria del cargador de clases .... terminado.
_pk11LibPath: /usr/lib/nss/libsoftokn3.so
DEBUG thread applet-es.uji.security.ui.applet.SignatureApplet-1 
es.uji.security.ui.applet.SignatureApplet [16:41:42,525] - Call JavaScript 
method: onInitOk
DEBUG Applet 1 LiveConnect Worker Thread es.uji.security.ui.applet.AppHandler 
[16:41:49,280] - Setting signOutputFormat to 
es.uji.security.crypto.raw.RawSignatureFactory
DEBUG Applet 1 LiveConnect Worker Thread es.uji.security.ui.applet.AppHandler 
[16:41:50,101] - Setting inputDataEncoding to PLAIN
DEBUG Applet 1 LiveConnect Worker Thread es.uji.security.ui.applet.AppHandler 
[16:41:50,108] - Setting inputDataEncoding to PLAIN
Obtenido path /usr/lib/opensc-pkcs11.so
DEBUG Applet 1 LiveConnect Worker Thread es.uji.security.keystore.dnie.Dnie 
[16:41:52,830] - DNIe is not inserted or it can not be loaded
DEBUG Applet 1 LiveConnect Worker Thread 
es.uji.security.ui.applet.JTreeCertificateBuilder [16:41:52,941] - Building 
certificate tree
DEBUG Applet 1 LiveConnect Worker Thread 
es.uji.security.ui.applet.SignatureApplet [16:41:53,110] - Call JavaScript 
method: onWindowShow
You chose to open this file: /usr/lib/opensc-pkcs11.so
_pk11LibPath: /usr/lib/opensc-pkcs11.so
PKCS11
actionPerformed()
java.security.KeyStoreException: PKCS11 not found
        at java.security.KeyStore.getInstance(KeyStore.java:676)
        at 
es.uji.security.keystore.pkcs11.PKCS11KeyStore.load(PKCS11KeyStore.java:97)
        at 
es.uji.security.keystore.pkcs11.PKCS11KeyStore.load(PKCS11KeyStore.java:78)
        at 
es.uji.security.ui.applet.EventActionHandler$7.actionPerformed(EventActionHandler.java:319)
        at 
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at 
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
        at 
javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
        at 
javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:1327)
        at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:568)
        at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:465)
        at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:411)
        at 
javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:305)
        at 
javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at 
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at 
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at 
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: PKCS11 
for provider SunPKCS11-USER-PKCS11
        at sun.security.jca.GetInstance.getService(GetInstance.java:83)
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:202)
        at java.security.Security.getImpl(Security.java:688)
        at java.security.KeyStore.getInstance(KeyStore.java:673)
        ... 35 more
</pre>

Por lo que he añadido el proveedor de SunPKCS11 al 'java.security' de la VM.
<pre>
security.provider.9=sun.security.pkcs11.SunPKCS11
</pre>

Aun así, al hacer la prueba me pide el fichero de configuración que no se carga 
por código
<pre>
You chose to open this file: /usr/lib/opensc-pkcs11.so
_pk11LibPath: /usr/lib/opensc-pkcs11.so
PKCS11
java.security.ProviderException: SunPKCS11 requires configuration file argument
        at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:81)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at sun.security.jca.ProviderConfig$3.run(ProviderConfig.java:240)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
sun.security.jca.ProviderConfig.doLoadProvider(ProviderConfig.java:225)
        at sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:205)
        at sun.security.jca.ProviderList.loadAll(ProviderList.java:264)
        at sun.security.jca.ProviderList.removeInvalid(ProviderList.java:281)
        at sun.security.jca.Providers.getFullProviderList(Providers.java:158)
        at java.security.Security.insertProviderAt(Security.java:325)
        at java.security.Security.addProvider(Security.java:372)
        at 
es.uji.security.keystore.pkcs11.PKCS11KeyStore.load(PKCS11KeyStore.java:96)
        at 
es.uji.security.keystore.pkcs11.PKCS11KeyStore.load(PKCS11KeyStore.java:78)
        at 
es.uji.security.ui.applet.EventActionHandler$7.actionPerformed(EventActionHandler.java:319)
        at 
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at 
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
        at 
javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
        at 
javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:1327)
        at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:568)
        at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:465)
        at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:411)
        at 
javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:305)
        at 
javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(BasicPopupMenuUI.java:807)
        at 
java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2353)
        at 
java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2245)
        at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2203)
        at java.awt.Component.dispatchEventImpl(Component.java:4528)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at 
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at 
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at 
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
</pre>

Mirando el codigo fuente veo que realizais la carga del proveedor PKCS11 de 
forma manual, pero no introducís configuración.
De todas formas he realizado una prueba a mano, cargando el PKCS11Keystore e 
invocando el método #load con y sin fichero de configuración, además del PIN y 
me lee correctamente la tarjeta.
<pre>
 PKCS11KeyStore pkStore= new PKCS11KeyStore("/usr/lib/opensc-pkcs11.so");
 pkStore.load(configIS, "1111".toCharArray());
 pkStore.load("1111".toCharArray());
 ArrayList<String> aliases = Collections.list(pkStore.aliases());               
                                
 System.out.println("Available aliases: " + aliases);
</pre>

__________

Como he leído que en pruebas que habéis realizado vosotros os ha ido todo bien, 
me podrías indicar en qué contexto funciona la lectura de certificados en 
tarjetas criptográficas? Versión de firefox, jre y tipo de smartcard? 

____

Muchas gracias,
Irune Prado
-----------------------------------------

_______________________________________________
CryptoApplet mailing list
[email protected]
http://llistes.uji.es/mailman/listinfo/cryptoapplet

Responder a