Foros del Web » Programación para mayores de 30 ;) » Java »

Como Acceder al KeyStore de Firefox

Estas en el tema de Como Acceder al KeyStore de Firefox en el foro de Java en Foros del Web. Hola: Necesito listar los certificados personales del KeyStore de Firefox, ya he hecho esto facilmente para IE con java6. Mi problema ocurre cuando se ejecuta ...
  #1 (permalink)  
Antiguo 22/01/2009, 06:40
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 2 meses
Puntos: 1
Como Acceder al KeyStore de Firefox

Hola:
Necesito listar los certificados personales del KeyStore de Firefox, ya he hecho esto facilmente para IE con java6.

Mi problema ocurre cuando se ejecuta esta instruccion:

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

Por lo que ni siquiera cargo el KeyStore.

Mi codigo :


public static void main(String[] args) throws KeyStoreException, CertificateException {
try {
//
System.load("c:/test/libnspr4.dll");
System.load("c:/test/libplc4.dll");
System.load("c:/test/libplds4.dll");
System.load("c:/test/softokn3.dll");
//
Provider nss = new sun.security.pkcs11.SunPKCS11("c:/test/test2.cfg");
Security.insertProviderAt(nss, 1);
KeyStore ks = KeyStore.getInstance("PKCS11", nss);
ks.load(null, null);
Enumeration aliases = ks.aliases();
String alias = null;
while (aliases.hasMoreElements()) {
alias = (String) aliases.nextElement();
System.out.println(alias);
}
Security.removeProvider(nss.getName());
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.S EVERE, null, ex);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(Main.class.getName()).log(Level.S EVERE, null, ex);
}
}


//////////////////////////////

El archivo test.cfg contiene:
name = NSS
slot = 2
library = C:/test/softokn3.dll
nssArgs = "configdir='c:/Documents and Settings/User/Datos de programa/Mozilla/Firefox/Profiles/aoyomgvn.default' certPrefix='' keyPrefix=''

secmod='secmod.db' flags=readOnly"

/////////////////////////////////////////////

El error al ejecutar:

run:
Exception in thread "main" java.security.ProviderException: Initialization failed
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.jav a:340)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.jav a:86)
at firma.Main.main(Main.java:164)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR
at sun.security.pkcs11.wrapper.PKCS11.C_Initialize(Na tive Method)
at sun.security.pkcs11.wrapper.PKCS11$SynchronizedPKC S11.C_Initialize(PKCS11.java:1488)
at sun.security.pkcs11.wrapper.PKCS11.getInstance(PKC S11.java:160)
at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.jav a:297)
... 2 more
Java Result: 1



Agradeceria cualquier tipo de ayuda, o me gustaria saber si lo hay que hacer de otra manera.

Gracias
  #2 (permalink)  
Antiguo 15/04/2009, 02:38
 
Fecha de Ingreso: abril-2009
Mensajes: 1
Antigüedad: 15 años
Puntos: 0
Respuesta: Como Acceder al KeyStore de Firefox

Yo tengo el mismo problema ¿has encontrado alguna solución?

Última edición por David; 15/04/2009 a las 07:59 Razón: Eliminar QUOTE
  #3 (permalink)  
Antiguo 15/04/2009, 08:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Como Acceder al KeyStore de Firefox

Tema transladado desde el foro de Programación.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 09/06/2009, 05:42
 
Fecha de Ingreso: octubre-2006
Mensajes: 6
Antigüedad: 17 años, 6 meses
Puntos: 1
Respuesta: Como Acceder al KeyStore de Firefox

Hola telemak0 parece que te voy siguiendo por todos los foros que visitaste tu en su dia.

¿Podrias decirme como lo hiciste para acceder al repositorio de certificados de IE?

¿conseguiste acceder al de FF?

gracias
  #5 (permalink)  
Antiguo 10/03/2010, 06:39
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como Acceder al KeyStore de Firefox

Hola.

Te pongo un código de ejemplo, deberas tener cuidado con las rutas del perfil etc que son muy puñeteras...

import java.io.ByteArrayInputStream;
import java.security.KeyStore;
import java.security.Security;
import java.security.cert.CertificateFactory;
import com.sun.security.auth.callback.DialogCallbackHandl er;
import com.tbsolutions.asf.websigner.util.Util;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import javax.security.auth.Subject;
import sun.security.pkcs11.SunPKCS11;

public class test {

/**
* @param args
*/
public static void main(String[] args) throws Throwable {

String providerConfig = "name = NSS"+"\n"+
"nssLibraryDirectory = "+"C:/Archivos de programa/Mozilla Firefox"+"\n"+
"nssSecmodDirectory = "+"\"C:/Documents and Settings/User/Datos de programa/Mozilla/Firefox/Profiles/aoyomgvn.default\""+"\n"+
"nssDbMode = readOnly" + "\n" +
"nssModule = keystore" + "\n" +
"\r";

System.load("C:/Archivos de programa/Mozilla Firefox/mozcrt19.dll");
System.load("C:/Archivos de programa/Mozilla Firefox/sqlite3.dll");

System.load("C:/Archivos de programa/Mozilla Firefox/nspr4.dll");
System.load("C:/Archivos de programa/Mozilla Firefox/plc4.dll");
System.load("C:/Archivos de programa/Mozilla Firefox/plds4.dll");
System.load("C:/Archivos de programa/Mozilla Firefox/nssutil3.dll");//

ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(string.getBytes());
SunPKCS11 _pk11provider = null;
try {
_pk11provider = new SunPKCS11(localByteArrayInputStream);
Security.addProvider(_pk11provider);
_pk11provider.login(new Subject(), new DialogCallbackHandler());
}catch(Throwable e){
System.out.println(e.getMessage());
}

KeyStore ks = KeyStore.getInstance("PKCS11",_pk11provider);

ks.load(null, null);
}


Para ver si te ha cargado certificados puedes añadir al final un codigo de este tipo:

Enumeration e = ks.aliases();

while(e.hasMoreElements()) {
System.out.println("\n\nCERT: ");
String alias = (e.nextElement()).toString();
java.security.cert.Certificate cert = ks.getCertificate(alias);
CertificateFactory cf = CertificateFactory.getInstance("X509");
X509Certificate cert509 = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(cert.getEncoded()));
System.out.println("\t"+cert509.getSubjectDN());
java.security.cert.Certificate[] chain = ks.getCertificateChain(alias);
if (chain != null) {
System.out.println("\t\t CADENA: ");
for (int x = 0; x < chain.length; x++) {
cert509 = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(chain[x].getEncoded()));
System.out.println("\t\t\t"+cert509.getSubjectDN() );
}
}

boolean cadenaCompleta = false;
try {
if (chain != null) {
for (int x = 0; x < chain.length; x++) {
X509Certificate certificate = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(chain[x].getEncoded()));
if(x==chain.length-1) {
if (certificate.getSubjectDN().toString().equalsIgnor eCase(certificate.getIssuerDN().toString())) {
cadenaCompleta = true;
}
}
}
}
} catch(Throwable t) {
Util.log(Util.ERROR, "JavaKeyStore", "findCertChain", " " + t.getMessage());
}

System.out.println("Cadena completa: "+cadenaCompleta);

}


Para acceder a los tokens externos como tarjetas lo unico que cambia es el provider config:

String providerConfig= "name = NSScrypto-1"+"\n"+
"nssLibraryDirectory = "+"C:/Archivos de programa/Mozilla Firefox"+"\n"+
"nssDbMode = readOnly"+"\n"+
"nssModule = external-1\n"+
"nssSecmodDirectory = "+"\"C:/Documents and Settings/User/Datos de programa/Mozilla/Firefox/Profiles/aoyomgvn.default\"\n";

NOTA: La linea que te pongo en rojo es la que deberas cambiar para poder coger diferentes tokens externos... cuando los instalas en el firefox van uniendose tras el ultimo instalado.. external-1, external-2, etc. el nombre tambine deberas cambiarlo... una vez tengas los proveedores metidos en el security... podras hacer instancias de los KeyStores pasandole ese proveedor...

NOTA 2: Cuando lo trates de poner en un applet (si es lo que queires hacer...) es posible que debas cambiar cosas en los string de config de los provider.. cosas en plan.. que cada linea termine con \n\r y ese tipo de cosas...

Para el de windows con java 1.6 deberas hacer mas o menos lo siguiente:

//certificados personales
KeyStore store = KeyStore.getInstance("Windows-MY");
store.load(null);
//cas
KeyStore store = KeyStore.getInstance("Windows-ROOT");
store.load(null);

Para los publicos hay que hacer unas cosas con reflexion y tal poruqe no esta implementados los accesos desde el proveedor sunMSCAPI pero no voy a meterme en ese tema, con esto mas o menos ya se puede trabajas.. firmar... verificar etc.
  #6 (permalink)  
Antiguo 10/03/2010, 10:04
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Como Acceder al KeyStore de Firefox

cometi un error.. donde pone

ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(string.getBytes());

deberia ser:

ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(providerConfig.getBytes());
  #7 (permalink)  
Antiguo 17/06/2011, 09:59
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Como Acceder al KeyStore de Firefox

Esta Todo correcto solo que en a algunos les da error si no comentan esta linea de código

System.load("C:/Archivos de programa/Mozilla Firefox/sqlite3.dll");
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:29.