Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问Firefox';来自Java的证书信任存储_Java_Firefox_Cryptography_Nss_Pkcs#11 - Fatal编程技术网

访问Firefox';来自Java的证书信任存储

访问Firefox';来自Java的证书信任存储,java,firefox,cryptography,nss,pkcs#11,Java,Firefox,Cryptography,Nss,Pkcs#11,我对这件事几乎失去了希望。 我正试图通过PKCS#11,使用Firefox安装附带的NSS库从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 mai

我对这件事几乎失去了希望。 我正试图通过PKCS#11,使用Firefox安装附带的NSS库从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());
        }
    }
}
运行应用程序时,我还设置了属性
-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)
NSS模块:[NSS内部PKCS#11模块(加密,/usr/lib/firefox/libsoftokn3.so,插槽0),NSS内部PKCS#11模块(密钥库,/usr/lib/firefox/libsoftokn3.so,插槽1)]
线程“main”java.security.ProviderException中出现异常:NSS模块不可用:信任锚
位于sun.security.pkcs11.SunPKCS11。(SunPKCS11.java:271)
位于sun.security.pkcs11.SunPKCS11。(SunPKCS11.java:103)
at Test.main(Test.java:11)
实际上,您可以看到在初始化步骤中没有加载“信任锚”模块,但我不知道为什么。 这里的文档说明:

信任锚模块允许访问NSS信任锚 如果已配置secmod.db,则通过PKCS11密钥库获取证书 包括信任锚库

但我不知道那是什么意思。 值得注意的是,我在WindowsXP32位和Ubuntu11.1064位上都有相同的行为。 似乎pkcs11.cfg是正确的,就好像我更改了应用程序将失败的任何路径,并出现其他错误一样


有什么好主意吗?

我最终通过使用JSS4 Mozilla库解决了这个问题。如果要使用它,请确保下载JSS4 JAR、本机库实现以及它的其他依赖项—NSPR和NSS本机库

确保在Linux上,本机库的位置在LD_LIBRARY_PATH中,在Windows上,它们的位置在%PATH%变量中。 您可能会尝试使用Firefox发行版附带的DLL/SOs这在我发现的Windows上不起作用(我认为这与它们是为WIN95平台编译的事实有关)


其余的信息在JSS4库的文档中,但您基本上需要使用
org.mozilla.jss.CryptoManager
类。

来了解secmod.db是什么?如果我用
modutil-list-dbdir/home/bogdan/.mozilla/firefox/x5d8wol9.default/
列出根证书模块,则确实会出现根证书模块。我认为问题与它认为该模块使用库“/home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so”有关,但该文件不存在。我尝试在那里复制它,但现在失败了:
线程“main”java.security.ProviderException中的异常:Library/usr/lib/firefox/home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so不存在
(请注意与LD_Library_路径串联的奇怪路径)
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)