Je souhaite examiner un keystore nssdb pour extraire des informations sur les alias disponibles. Sur une autre partie de la même application, j'utilise BouncyCastleProvider
pour gérer d'autres choses de sécurité. Le petit code ci-dessous montre comment je le charge et le cours, et fonctionnait bien avec openjdk-1.6.0. Maintenant, avec openjdk-1.7.0, cela ne fonctionne que si je n'utilise pas le BouncyCastleProvider
ou si ce fournisseur est ajouté après le fournisseur PKCS11. Si j'ajoute BC avant PKCS11, tout semble correct (sans exception), mais Keystore.aliases()
renvoie une liste vide pour mon conteneur nss. Tout comme si load()
ne fonctionnait pas.openjdk1.7: Echec de la liste des alias keystore PKCS11 lorsque BouncyCastleProvider est utilisé
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.Enumeration;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.security.cert.Certificate;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class TestNSS {
public static void main(String[] args) {
try {
Provider prov = new BouncyCastleProvider();
Security.addProvider(prov);
String config = "name = nssdb\n";
config += "nssSecmodDirectory = /nssdbpath\n";
InputStream stream = new ByteArrayInputStream(config.getBytes("UTF-8"));
Provider nss = new sun.security.pkcs11.SunPKCS11(stream);
stream.close();
Security.addProvider(nss);
KeyStore ks = KeyStore.getInstance("PKCS11", "SunPKCS11-nssdb");
ks.load((InputStream)null, "".toCharArray());
System.out.println("load is ok: SunPKCS11-nssdb");
for (Enumeration<String> e = ks.aliases(); e.hasMoreElements();) {
String alias = e.nextElement();
Certificate cert = ks.getCertificate(alias);
System.out.println(" . alias: "+alias+", "+cert.getType()+","+((X509Certificate)cert).getNotAfter());
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
Toute idée est la bienvenue ...
Note:/nssdbpath contient une structure créée en utilisant nssdb certutil.