2012-05-03 6 views
4

Je perds presque espoir sur celui-ci. J'essaie d'accéder au magasin de confiance Firefox à partir de Java 7 en utilisant les bibliothèques NSS fournies avec l'installation de Firefox, via PKCS # 11.Accéder au certificat de confiance de Firefox à partir de Java

Voici le code:

import java.security.KeyStore; 
import java.security.Security; 
import java.util.Enumeration; 
import sun.security.pkcs11.SunPKCS11; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     String configName = "pkcs11.cfg"; 
     SunPKCS11 p = new SunPKCS11(configName); 
     Security.addProvider(p); 
     KeyStore ks = KeyStore.getInstance("PKCS11", p); 
     ks.load(null, "apassword".toCharArray()); 
     System.out.println("Size: " + ks.size()); 
     Enumeration<String> aliases = ks.aliases(); 
     while (aliases.hasMoreElements()) { 
      System.out.println(aliases.nextElement()); 
     } 
    } 
} 

Voici le contenu PKCS # 11 config:

name = NSS 
nssLibraryDirectory = /usr/lib/firefox/ 
nssSecmodDirectory = "/home/bogdan/.mozilla/firefox/x5d8wol9.default/" 
nssModule =trustanchors 
showInfo = true 

Quand je lance l'application, je mets aussi la propriété -Djava.library.path=/usr/lib/firefox/

Lorsque Je cours l'application que je reçois ce qui suit:

NSS modules: [NSS Internal PKCS #11 Module (CRYPTO, /usr/lib/firefox/libsoftokn3.so, slot 0), NSS Internal PKCS #11 Module (KEYSTORE, /usr/lib/firefox/libsoftokn3.so, slot 1)] 
Exception in thread "main" java.security.ProviderException: NSS module not available: trustanchors 
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:271) 
    at sun.security.pkcs11.SunPKCS11.<init>(SunPKCS11.java:103) 
    at Test.main(Test.java:11) 

Vous pouvez voir que le module "trustanchors" n'est pas chargé lors de l'initialisation, mais je ne sais pas pourquoi. La documentation ici: dit que

Le module trustanchors permet d'accéder à l'ancre de confiance NSS certificats via le PKCS11 KeyStore, si secmod.db a été configuré pour inclure la bibliothèque d'ancrage de confiance.

mais je n'ai aucune idée de ce que cela signifie. Il convient de noter que j'ai le même comportement avec Windows XP 32 bits et Ubuntu 11.10 64 bits. Il semble que le fichier pkcs11.cfg soit correct, comme si je modifiais l'un des chemins d'accès à l'application avec d'autres erreurs.

Des idées brillantes?

+0

pour savoir ce que secmod.db est? http://www.mozilla.org/projects/security/pki/nss/tools/modutil.html – mazaneicha

+0

Le module de certificat racine apparaît si je le liste avec 'modutil -list -dbdir /home/bogdan/.mozilla/firefox/x5d8wol9.default/' – Bogdan

+0

Je pense que le problème est lié au fait qu'il pense que ce module utilise la bibliothèque" /home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so ", mais ce fichier doesn ' t existe. J'ai essayé de le copier là et maintenant je reçois cet échec: 'Exception dans le fil" principal "java.security.ProviderException: Bibliothèque /usr/lib/firefox/home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so n'existe pas »(remarquez le chemin bizarre qui est une concaténation avec LD_LIBRARY_PATH) – Bogdan

Répondre

1

J'ai réussi à résoudre le problème en utilisant la bibliothèque JSS4 Mozilla. Si vous voulez l'utiliser, assurez-vous de télécharger le JAR JSS4 ainsi que l'implémentation de la bibliothèque native ET les autres dépendances dont il dispose - les bibliothèques natives NSPR et NSS.

Assurez-vous que sous Linux, l'emplacement des bibliothèques natives se trouve dans LD_LIBRARY_PATH et sous Windows, leur emplacement se trouve dans la variable% PATH%. Vous pourriez être tenté d'utiliser les DLL/SO fournies avec la distribution de Firefox. Cela ne fonctionne pas sur Windows j'ai trouvé (quelque chose à voir avec le fait qu'ils ont été compilés pour une plate-forme Win95 je pense)

Le reste de l'information est dans la documentation de la bibliothèque JSS4, mais vous essentiellement besoin d'utiliser la classe org.mozilla.jss.CryptoManager.

Questions connexes