我对这个几乎失去希望了。
我正在尝试使用 Firefox 安装附带的 NSS 库通过 PKCS#11 从 Java 7 访问 Firefox 信任存储。
这是代码:
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());
}
}
}
以下是 PKCS#11 配置的内容:
name = NSS
nssLibraryDirectory = /usr/lib/firefox/
nssSecmodDirectory = "/home/bogdan/.mozilla/firefox/x5d8wol9.default/"
nssModule =trustanchors
showInfo = true
当我运行应用程序时,我还设置了属性-Djava.library.path=/usr/lib/firefox/
当我运行该应用程序时,我得到以下信息:
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)
您实际上可以看到“trustanchors”模块在初始化步骤中未加载,但我不知道为什么。
文档在这里:http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#NSS http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#NSS说
trustanchors 模块允许访问 NSS 信任锚
通过 PKCS11 KeyStore 的证书(如果已配置 secmod.db)
包括信任锚库。
但我不知道这意味着什么。
值得注意的是,我在 Windows XP 32 位和 Ubuntu 11.10 64 位上都得到了相同的行为。
看来 pkcs11.cfg 是正确的,就好像我更改了应用程序将因其他错误而失败的任何路径一样。
有什么好主意吗?