2013-09-03 1 views
0

Je veux utiliser nss en tant que fournisseur pour pkcs11 et je suis en train de coder en Java, sur Oracle JRE et Ubuntu 64bit. J'ai essayé 2 wrappers différents, iaik et SunPKCS11 mais dans les deux j'ai eu le même problème. Pour mon fournisseur, j'ai d'abord essayé d'utiliser libnss3.so et chaque fois que j'ai eu IOException dans un module d'instanciation. Ensuite, j'utilise libsoftokn3.so et j'ai réussi à instancier un module. Mais maintenant, je fais face à cette exception à l'initialisation: "CKR_ARGUMENTS_BAD"Comment initialiser le fournisseur pour pkcs11?

Voici mes codes, en utilisant d'abord IAIK et le second en utilisant SunPKCS11

iaiak:

 Module pkcs11Module = Module.getInstance("libsoftokn.so"); 
     pkcs11Module.initialize(null);  //Here Throws the Excption:"iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD" 
     Info info = pkcs11Module.getInfo(); 
     System.out.println(info); 
     pkcs11Module.finalize(null); 

SunPKCS11:

String configName = "cfg"; 
    Provider p = new sun.security.pkcs11.SunPKCS11(configName); //Here Throws the Excption:"sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD" 
    Security.addProvider(p); 

et le fichier "cfg":

name = nss 
library = /usr/lib/libsoftokn3.so 

Répondre

1

Au lieu de spécifier la bibliothèque, vous pouvez spécifier le répertoire comme ceci.

Properties props = new Properties(); 
props.put("name", "nss"); 
props.put("nssLibraryDirectory", libDir); 
props.put("nssSecmodDirectory", dbDir); 
props.put("nssModule", "fips"); 
props.put("nssDbMode", "readWrite"); 

ByteArrayOutputStream out = new ByteArrayOutputStream(); 
props.store(out, null); 
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 

Provider ret = new sun.security.pkcs11.SunPKCS11(in);