martes, marzo 27, 2007

Cómo acceder al keystore de Firefox con Java

Pues resulta que mi última labor ha consistido en acceder al keystore de Firefox para recuperar certificados y firmar con ellos.

La labor ha sido ardua, ya que he encontrado mil referencias en páginas, foros y blogs, pero como casi siempre, he tenido que ir tomando ideas de aquí y de allí e ir construyendo la solución a partir de todas ellas.

El primer camino consistió en tratar de utilizar la librería JSS de Mozilla, pero no hubo manera de que funcionase. Para empezar era necesario colocar una librería en el directorio de instalación de Firefox. Después, necesitabamos firmar (CMS signature) y para ello usabamos las clases de Bouncy Castle, pero no conseguimos firmar con BC con el certificado que obteníamos mediante JSS... ¡¡uff!!.

Hay que decir que realmente sí conseguíamos firmar, pero sólo obteníamos el hash, cuando lo que buscábamos era el formato "detached" (el resultado de firmar es una cadena codificada en base 64 que incluye aparte del hash, información del propio certificado).

Inicialmente, sólo conseguimos firmar solicitando al cliente que indicase el archivo que contenía el certificado. No era lo que queríamos, pero no teníamos otra solución.

Comoquiera que esta solución no satisfacía a nadie, continué investigando, y descubrí la clase sun.security.pkcs11.SunPKCS11, la cual actúa como wrapper sobre las librerías nativas PKCS11 y permite su uso para acceder a los dispositivos que almacenan certificados.

Para usar la clase es necesario pasarle path completo a un archivo de configuración, cuya contenido consiste en una seríe de parámetros que dependen del módulo PKCS11 nativo que vayamos a cargar.

Por último, quedaba saber qué librerías eran necesarias (incluyendo el módulo PKCS11) para poder acceder al keystore de Firefox. Las librerías son también de Mozilla: NSS (Network Security Services) y NSPR.

Podemos obtener las librerías NSS de aquí:

Windows: http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_11_4_RTM/msvc6.0/WINNT5.0_OPT.OBJ/nss-3.11.4.zip
Linux:
http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_11_4_RTM/Linux2.6_x86_glibc_PTH_OPT.OBJ/nss-3.11.4.tar.gz

Cuando descomprimimos estos archivos, contienen un directorio lib en el cual aparecen una serie de librerías (.dll para Windows, .so para Linux) de las cuales necesitaremos exáctamente los siguiente archivos:

Windows:
  • freebl3.dll
  • libnspr4.dll
  • libplc4.dll
  • libplds4.dll
  • softokn3.dll (módulo PKCS11)
Linux:
  • libnspr4.so
  • libplc4.so
  • libplds4.so
  • libsoftokn3.so (módulo PKCS11)
Si colocamos estas librerías en el java.library.path, parte de lo que explicaré a continuación no será necesario, pero en mi caso no podía realizar una instalación previa en el cliente, por lo cual mi solución consiste en incluir estos archivos como recursos en el jar que genero y en tiempo de ejecución crear un directorio en "user.home" en el cual escribo los archivos correspondientes al sistema (por supuesto, chequeando previamente si existe el directorio y los archivos están en el mismo).

Antes de poder acceder al keystore, necesitamos algo más. El constructor de la clase SunPKCS11 recibe como parámetro el path a un archivo de configuración que contiene cierta información que depende en parte del la librería nativa PKCS11 que vayamos a usar. En nuestro caso el archivo (test.cfg) debe contener algo parecido a esto:

name = NSS
slot = 2
library = C:/test/softokn3.dll
nssArgs = "configdir='C:/Documents and Settings/usuario/Datos de programa/Mozilla/Firefox/Profiles/zehrgci3.default' certPrefix='' keyPrefix='' secmod='secmod.db' flags=readOnly"

Nota (1): Es muy importante que el caracter separador de archivos sea "/", de lo contrario, obtendremos una excepción en el constructor de la clase SunPKCS11.

Nota (2): Es labor de cada uno averiguar en tiempo de ejecución en qué directorio está almacenado el keystore de Firefox. Lo que es seguro es que está en el "user.dir" o en un directorio dentro del "user.dir". Lo que es seguro es que en el directorio que buscamos deben estar los archivos "cert8.db", "key3.db" y "secmod.db". El directorio exácto en el que se encuentra depende del sistema operativo que usemos.

Lo que debemos hacer es algo parecido a esto:

//Crear el directorio "C:/test/"
//Escribir las librerías correspondientes
//Escribir el archivo de configuración
...
...

// Carga de las librerías en Windows
System.load("C:/test/libnspr4.dll");
System.load("C:/test/libplc4.dll");
System.load("C:/test/libplds4.dll");
System.load("C:/test/softokn3.dll");

//Creamos el Provider con la clase SunPKCS11
Provider nss = new sun.security.pkcs11.SunPKCS11("C:/test/test.cfg");
Security.insertProviderAt(nss, 1);
KeyStore ks = KeyStore.getInstance("PKCS11", nss);
ks.load(null,"".toCharArray());
Enumeration aliases = ks.aliases();
String alias = null;
while (aliases.hasMoreElements()) {
alias = (String) aliases.nextElement();
System.out.println(alias);
}
Security.removeProvider(nss.getName());

En mi siguiente post, enviaré un ejemplo de un código completo y funcional y además explicaré cómo acceder con Java a los certificados almacenados en el DNI electrónico de España.

Si alguien necesita el código inmediatamente, que me envié una respuesta al post.

Saludos,

pedrop.

46 comentarios:

Anónimo dijo...

Me interesa mucho el tema...
por que no le siguieron???

Saludos

Anónimo dijo...

Hola, estamos tarbajando en este tema y vemos que tu información nos es de gran ayuda. Una buena idea cargar las dll sin que el cliente deba ir a la página. Nos gustaría conocer el código tanto para cargarlas en Windows como en Unix. Muchas gracias por tu información

pedrop dijo...

Hola. He estado ocupado y no he podido postear el código completo.

Intentaré ampliar la información esta semana, pero para empezar diré que con el código que hay en la entrada del blog debería ser suficiente como para poder acceder al keystore.

Respecto a cómo hago que las .dll (o .so) se descarguen en el cliente: mi aplicación es un applet. En el jar del applet incluyo las librerías, tanto de Windows como de Linux, como archivos de recursos (ojo, hay que generar el jar sin compresión). Cuando el applet se carga, se leen las propiedades del sistema para determinar el sistema operativo y el directorio de usuario.

En el directorio de usuario se crea una carpeta y en esa carpeta se crea el archivo de configuración.

Para escribir las .dll/.so en la carpeta, abro los recursos del jar con "getClass().getResourceAsStream("nombre_recurso")" . Esto me devuelve un InputStream.

Por otro lado, abro un FileOutputStream, de manera que leo de un stream y escribo en el otro.

Saludos,

pedrop

yorch dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

Muchas gracias por como cargar las librerias desde el jar al cliente. En un principio pensamos en hacer ClassLoader y pasar ese string para crear los ficheros en el cliente y luego hacer el System.load() pero no controlabamos bien el path de ubicacion de los ficheros.

Anónimo dijo...

Hola pedrop, es harto interesante esta información.

Estoy intentando acceder al keystore de firefox a través de un applet firmado pero la única manera es buscando en el home del usuario a través de todos los profiles.

¿¿¿Cómo has conseguido llegar al profile que el usuario está utilizando en ese momento???

Muchas gracias por la ayuda prestada y la que me puedas prestar. Gracias.

pedrop dijo...

Hola tg,

efectivamente, yo me encontré con el mismo problema que tú... Por desgracia, no encontré una solución sencilla. Tuve que crear un método que realizaba una búsqueda recursiva en el directorio de usuario ("user.dir").

Se buscó una solución de compromiso que asume que se usa el perfil por defecto. Ya sé que no es lo óptimo, pero no encontré referencias en el registro...

Los perfiles se guarda por defecto (en Windows en castellano) en una carpeta como esta: "C:\Documents and Settings\usuario\Datos de programa\Mozilla\Firefox\Profiles".

El nombre de la carpeta con el perfil por defecto se genera aleatoriamente, pero termina en .<nombre_del_perfil>. En mi máquina ahora mismo el nombre de la carpeta es "pxjjeeih.default".

En la documentación de Firefox (enlace), podrás ver una sección llamada "¿Dónde se encuentra el perfil en Mozilla Firefox?", en la que muestra la ubicación de los perfiles dependiendo del sistema operativo.

No te fies del todo, ya que por ejemplo, el directorio de Windows "Datos de programa" no existe en la versión en inglés...

Lamento no poder ayudarte más. Ya te digo: búsqueda recursiva en el directorio de usuario y asumir que el único perfil válido es el perfil por defecto.

Por cierto, ten en cuenta que esa búsqueda sólo se realizará la primera vez que se cargue el applet, ya que la información quedará guardada en el archivo de configuración y no tendrás que volver a tocarlo a menos que se borre el mismo.

Saludos,

pedrop

Anónimo dijo...

Vaya, eso suponía. Por suerte, en mi applet, el usuario se encuentra logado con el certificado con el que firmará. Buscaré por los keystores que me encuentre hasta dar con él.

De nuevo Muchas Gracias.

Anónimo dijo...

Hola. También estoy trabajando en un applet firmado que debe recuperar el certificado del browser para firmar un documento.

Pero hay "algo" que no me va bien.
Si tengo el certificado instalado directamente en Firefox el applet lo reconoce y firma. Pero si el certificado no está directamente instalado en Firefox, sino que está en una tarjeta (FNMT) (aunque el certificado se ve en Herramientas/opciones...), en este caso el applet no lo encuentra en el keystore del browser.
¿Alguna idea?
Gracias.

pedrop dijo...

Hola afar,

sobre lo que te pasa si que tengo una idea de lo que es. Lo que ocurre es que aunque en el Firefox los certificados instalados y los de la tarjeta aparezcan en la misma lista, están en dispositivos diferentes y por tanto en keystores diferentes.

En la entrada del blog se habla de cómo acceder a los certificados que has instalado diréctamente en el Firefox.

Para acceder a los certificados de la tarjeta probablemente tendrás que volver a utilizar la clase SunPKCS11 con otro archivo de configuración diferente para crear otro Provider que te permita acceder al nuevo keystore, el cual está en la tarjeta... lo sé, yo lo tuve que hacer con el DNI electrónico español.

Por cierto esto último me está provocando problemas, ya que para firmar uso las clases de Bouncy Castle y:

- Puedo hacer múltiple firma con certificados instalados en el keystore de Firefox.

- NO SE COMO hacer múltiple firma con un certificado instalado en Firefox y otro instalado en la tarjeta.

- NO SE COMO hacer múltiple firma con dos certificados instalados en dos tarjetas distintas.

Como veis, aún me queda bastante por aprender sobre el tema. Si alguno de vosotros supiese como solucionar estos problemas, se lo agradecería.

Por último, para acceder a la tarjeta, se necesita alguna dll específica de la misma. Por ejemplo el archivo de configuración que yo uso para acceder al DNI electrónico es como esté:

name = DNIe
library = C:/WINDOWS/System32/UsrPkcs11.dll

En el caso del DNI-e la dll UsrPkcs11 se instala al ejecutar una aplicación que te descargas de su web (www.dnielectronico.es). En este caso no es necesario instalar dll's en el cliente, ya que este tendrá que haber instalado esa aplicación y además debe disponer de un lector de tarjetas compatible.

Anónimo dijo...

Gracias por tu rápida aclaración.

Efectivamente con otro archivo de configuración accedo o la tarjeta. La librería en esta caso es PkcsV2GK.dll.

Anónimo dijo...

Mi gozo en un pozo, buscar por los profiles hasta dar con el keystore que contiene el certificado que busco no sirve.

En cuanto cargo un keystore ya no hay nada que hacer.
Lo inicializo todo.
Elimino el provider.
Cambio la configuración con la nueva carpeta.
Creo un provider nuevo.
Cargo el nuevo keystore y, sorprendentemente, tiene los mismos certificados que el primer keystore que fue cargado.

¿Alguien sabe como inicializar esto para que haga caso al nuevo provider???

NSeven dijo...
Este comentario ha sido eliminado por el autor.
NSeven dijo...

Antes que nada darte las gracias por este magnífico post, es de gran ayuda. Estoy escribiendo un applet para firmar pdfs y me ha venido genial.

Quería comentarte una cosa, las librerías que tu incluyes en el applet (nprs), ya se encuentran en el sistema objetivo:

Windows: /Archivos de Programas/Mozilla Firefox/
Linux (Debian): /usr/lib/iceweasel
Linux (Ubuntu): /usr/lib
MACOSX: /Applications/Firefox.app/Contents/MACOS/

pedrop dijo...

Hola nseven,

ante todo te agradezco tu post. Encantado de haber podido ayudar a otros que se han encontrado con el mismo problema.

Respecto a lo que dices de la librería NSPR, es cierto, pero el problema es que no se encuentran (al menos, no en todos los casos) en el "java.library.path", por lo cual la JVM no puede cargarlas. Entre la opción de buscar las librerías y la de descargarlas desde el applet, la segunda me pareció más simple. Además, también son necesarias librerías de NSS.

De nuevo gracias, por tu post.

Saludos,

pedrop

happy dijo...

Hola! En primer lugar me gustaría darte la enhorabuena por este post, ya que a los que estamos empezando con este tema nos está siendo de gran ayuda.

Hoy me han asignado un proyecto nuevo en el que debo tratar con DNIe, y soy completamente nueva en esto.

En primer lugar, debo obtener el nombre de la persona titular (datos de filiación). No sé lo que tengo que hacer para ello. Tengo las librerías de windows que mencionas, pero no sé los pasos que tengo que seguir. ¿Tengo que coger el certificado para algo? ¿Se puede acceder a los datos de filiación directamente?

Muchas gracias de antemano

pedrop dijo...

Hola happy,

si que se puede obtener el nombre y los apellidos del DNI (concretamente del certificado). Tienes que usar los métodos estándar de acceso a certificados X509. En concreto, puedes extraerlo con el método:
cert.getSubjectX500Principal().getName();

Esto te devuelve el DN, dentro del cual está el CN (Common name) en el cual está el nombre del propietario del certificado.

Si necesitas más información, aquí estamos...

Saludos,

pedrop

happy dijo...

Muchas gracias!!!

Ya he conseguido los datos que necesitaba.

Gracias por la ayuda. Haces un gran trabajo con este blog.

Un saludo!!!

Anónimo dijo...

Gracias a tu ayuda ya tenemos todo funcionando.

Ahora nos encontramos con un problema. Necesitamos permitir la firma utilizando DNI-e. Ya hemos con seguido firmar y verificar lo firmado con java, pero al intentar verificarlo con la capicom.dll de windows, no nos verifica. Firmando con cualquier otro certificado si que nos lo verifica, el problema sólo aparece con el DNI-e.

La firma la realizamos de la misma manera que con cualquier smarcard, la única diferencia es el módulo dll de acceso a la tarjeta.

Si alguno se ha encontrado con el mismo problema y lo ha solucionado, o tiene alguna idea, sería una graaaan ayuda.

Un saludo

Anónimo dijo...

Hola de nuevo pedrop.

He podido acceder al keystore para recuperar los certificados y firmar datos. Estupendo tu blog.

Para firmar al conectarnos al servidor, no bajamos un applet firmado que realiza todo el tema de firma.

Pero ahora me encuentro con otro problema al probarlo todo con https.

Parece que no llega a conectarse (ssl) con el servidor para bajarse los .jar del applet porque no encuentra los certificados que hay en Firefox. De hecho sale una ventana (java) solicitando autentificación y pidiendo que se seleccione el certificado para ella, pero la ventana está vacía. No accede,por tanto, al keystore de Firefox.

Supongo que será el plug_in del Firefox el que tiene problemas para acceder al keystore (bueno, los problemas los tengo yo, claro).

Un saludo.

Anónimo dijo...

Vale, instalando las jss ya reconoce el keystore de Firefox para autentificarse en SSL

Batou dijo...

Antes de nada, muchas gracias por tu post.
Estoy realizando pruebas con el código y actualmente obtengo la siguiente excepción: Initialization failed, causado por sun.security.pkcs11.wrapper.PKCS11Exception: 0xCE534351. Lo único que se me ocurre es que esté utilizando una versión de las nspr diferente.

Me gustaría saber que versión de las librerías de nspr estás utilizando, pues si bien pones el enlace de descarga de las nss no pones las de las nspr.

Un saludo y muchas gracias.

pedrop dijo...

Hola Batou, las librerías NSPR están en el mismo servidor FTP que las nss. Para la versión 4.6.4 (Windows), el directorio es el siguiente:

ftp://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.6.4/msvc6.0/WINNT5.0_OPT.OBJ/

Si necesitas otra versión, puedes navegar por el subdirectorio "releases".

Esta versión (4.6.4) tiene el código compilado, o sea que incluye archivos dll. En versiones posteriores sólo se encuentra el código fuente, de forma que es necesario compilarlo. Creo que esto también sucede para la librería NSS.

Un saludo.

pedrop dijo...

No se ve bien la URL para descargar la librería NSPR. La repito aquí:

Descargar la librería NSPR (Windows)

Batou dijo...

Muchas gracias, ya tengo las librerías, pero el error se debía a utilizar "\" en vez de "/". Despiste que le vamos a hacer. Muchas gracias de todas formas.

Luisito dijo...

Post genial, muy buen trabajo. ¿Puedes enviarme el codigo de acceso al DNIe?
luis@estepario.net

pedrop dijo...

Hola Luisito, me pillas un poco liado. Si puedes esperar un día o dos, voy a preparar un nuevo post comentando como firmé con el DNI-e.

Saludos,

pedrop

Anónimo dijo...

Hola Afar (Comunidad de programadores), un gran favor, me podrías pasar el link, tutorial o código de como "leer", "obtener" los certificados pk12 de los navegadores de internet.

De antemano te doy las gracias.

Atentamente. Carlos Solís
juancarloschiapas@yahoo.com.mx
10/Nov/2008

Jordi dijo...

Primero de todo felicitar el autor del post. Estoy implementando un applet para firmar con DNIe. Para linux, si utilizo la librería opensc-pkcs11.so, solo funciona si no tengo el firefox abierto ya que si está abierto bloquea la smartcard del dnie y con el applet no puedo acceder a no ser que no instale la smardcard del dnie en el firefox. He pensado utilizar el código del post, lo he probado y solo me lee los certificados que estan instalados directamente en la keystore del firefox. Los del dnie no. Se puede acceder a una smartcard des de las librerías NSS,NSPR ? Alguien se ha encontrado con el mismo problema?

Un saludo a todos!
PD: He probador de configurar las librerías opncs para que se no bloqueante pero tampoco funciona.

Anónimo dijo...

El directorio datos de programa está en una variable de entorno así que la recogéis desde System.getenv().

Desde linux es mas sencillo, porque si está en el home del usuario, bajo el nombre ./mozilla/firefox .... (recordad, siempre minúsculas!).

Otra sugerencia es que para las librerías en linux os van a venir con los sufijos de las versiones osea que sería interesanta como solución crear enlaces duros desde carpetas que estén en el java library.path con el nombre original sin sufijos.

napoo dijo...

Gracias loco!!!!!
Me salvaste de un bife grande.

napoo dijo...

Encontre como ubicar el perfil del usuario en firefox.

hay que explorar el archivo profiles.ini y ahi estan listados:

http://kb.mozillazine.org/Profiles.ini_file

y un comienzo de como hacerlo (codigo fuente de selenium):

http://code.google.com/p/webdriver/source/browse/trunk/firefox/src/java/org/openqa/selenium/firefox/internal/ProfilesIni.java?spec=svn581&r=581

Nando dijo...

Predrop,

I would like to see that code on how to extract the certificates from Firefox's truststore.

I cannot write in Spanish, sorry, but I can read it quite well. I can write in Portuguese though.

Would you send me the code?

Another question is: how do you deploy the NSS libraries? Do you have to manually install in the customer side?

Yo necessito el codigo completo y funcional. Please envie el codido.

Muchas gracias,

Carlos.

Ernesto Alcojor Valverde dijo...

Necesito Ayuda! He visto vuestro sitio pero no se bien en que idioma hablais,yo tengo conocimiento de encendido y apagado de ordenadores y dos o tres cositas+ por lo que agradeceria enormemente si alguien pudiera echarme un cable. Ahí voy: mensaje; " no se ha podico cargar los applet de firma", ya instale la ultima version de java sun, el certificado digital el cual me reconoce y puedo validar la aplicacion pero cuando lo hago me se sale el mensajito de apllet no reconoce la firma. Tengo winXp sp3 y firefox

Anónimo dijo...

Pedro, primero, muchas gracias por tu post, me es de mucha utilidad.

Pero tengo un problema. Me he descargado el zip con als librerías de NSS, pero en la carpeta "lib" no se encuentran todas las que especificas que necesitamos. De dónde las obtuviste tú?

Muchas gracias por adelantado.

Un saludo

Anónimo dijo...

Disculpa! Ya vi que son las de NSPR. Im sorry...

Tu post em es de gran utilidad, pues debo adaptar un applet para que acceda al almacén de Firefox. Me parece que tengo que hacer un desarrollo muy similar al tuyo, sinó prácticamente igual. ;-)

Gracias de nuevo!

Sergio C. dijo...

Hola.
Me podrías pasar el Codigo en java para poder acceder a los certificados del DNIE español para linux.

Muchas gracias.

Unknown dijo...

Muy buena la información, yo he estado intentando buscar la forma de acceder a los keystores de firefox pero no he hecho mas que dar vueltas. Tengo que firmar un pdf y lo he conseguido con el certificado exportado, pero no accediendo al keystore. Podrías pasarme el código para ver como lo has hecho. Muchas gracias

Unknown dijo...

Abeliko... no sé si te servirá, pero en el curro hemos tenido que firmar unos PDF y hemos utilizado las librerías de iText, que tienen funciones para hacerlo (en Java).

Unknown dijo...

Si si utilo itext para firmar. He hecho un applet que firma a traves de los certificados guardados en el keysotre de firefox. Ahora me haría falta que funcionara bajo explorer, alguien sabe como acceder a esos certificados? Muchas gracias.

Por cierto un post genial.

pedrop dijo...

abeliko,

al contrario de lo que pasa con los certificados instalados en FireFox, firmar con los certificados instalados en Windows/Internet Explorer está bastante bien documentado.

Recuerdo que en su momento en la documentación de Sun estaba bastante bien descrito y hay muchas referencias. Te pongo una que podría servirte: http://java.sun.com/developer/technicalArticles/J2SE/security/.

Saludos

Unknown dijo...

Me reitero, muchisimas gracias por este post, me habeis solucionado la vida de verdad.

Y a ti Pedrop, mil gracias, con ese link ya lo tengo todo hecho para ie/Windows.

Gracias!

Unknown dijo...

Otra duda que tengo. Ahora tengo que acceder a los certificados de firefox en Mac OS. Al tener el nucleo unix, como linux, con cargar las librerias .so es suficiente, o necesito otro tipo de librerias?

pedrop dijo...

Hola con retraso,

Para poder firmar con el DNIe de España, es preciso instalar en primer lugar el software proporcionado en el site oficial.

El archivo de configuración que hay que pasar para leerlo en Windows es:

name = DNIe
library = C:/WINDOWS/System32/UsrPkcs11.dll

En el caso de Linux:

name = DNIe
library = /usr/lib/opensc-pkcs11.so

Saludos,

pedrop

pedrop dijo...

Se me olvidaba comentar que este el contenido del archivo de configuración que hay que pasar al constructor de la clas SunPKCS11:

Provider nss = new sun.security.pkcs11.SunPKCS11("C:/test/dni.cfg");

Esto es lo único que cambia para el DNIe. El resto del código es igual.

Ana dijo...

Hola
ya hace tiempo de esta entrada en el este blog pero estoy desarrollando un programa en el que tengo que firmar un PDF accediendo al keystore de firefox y necesito vuestra ayuda!!!
El caso es que he implementado un programilla en un applet para acceder al keystore exactamente igual al que comentas en tu entrada y me sale el siguiente error cuando ejecuta esta instrucción: KeyStore ks = KeyStore.getInstance("PKCS11",_pk11provider);
me dice que: Error parsin configuration...missing provider!!!
La verdad es que ya no se qué hacer...el fichero de configuración es el siguiente y contiene la ruta exacta de donde se ubican los ficheros necesarios:
providerConfig = "name = NSS"+"\n"+
"nssLibraryDirectory = "+"C:/Program Files (x86)/Mozilla Firefox"+"\n"+
"nssLibrary = "+"C:/Program Files (x86)/Mozilla Firefox/softokn3.dll"+"\n"+
"nssSecmodDirectory = "+"C:/Users/SM/AppData/Roaming/Mozilla/Firefox/Profiles/plmk3eh9.default"+"\n"+
"nssDbMode = readOnly" + "\n" +
"nssModule = keystore" + "\n" +
"\r";
// configuracionPKCS11 = "name = DNIe\nlibrary = C:\\Windows\\SysWoW64\\UsrPkcs11.dll\n";
// System.load("C:/Archivos de programa(x86)/Mozilla Firefox/mozcrt19.dll");
// System.load("C:/Archivos de programa(x86)/Mozilla Firefox/sqlite3.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/nspr4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/plc4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/plds4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/nssutil3.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/libnspr4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/libplc4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/libplds4.dll");
System.load("C:/Program Files (x86)/Mozilla Firefox/softokn3.dll");
el sistema operativo que estoy utilizando es Windows 7 y Firefox 24.0y esas son las rutas de acceso a las diferentes librerías.
Cualquier ayuda que podáis prestar será más que bien recibida ya que me encuentro atascada en esto y no sé cómo seguir.
MUCHÍSIMAS GRACIAS!!!