在哪里可以找到我的 FireFox 配置文件? NSS 在 secmod.db 中找不到外部安装的 module/token

Where to find my FireFox profile? NSS cannot find external installed module/token in secmod.db

注意:我已经找到了这个问题的答案,所以我会关闭它。这是由于返回FireFox配置文件文件夹的方法不起作用,它只是定位到所有配置文件所在的目录,而没有进入我的配置文件文件夹。而在这个文件夹下(比如/home/myUserName/.mozilla/firefox/,还有key3.dbcert8.dbsecmod.db,但是里面没有任何user-specific的设置,我我猜它们是创建所有配置文件的基础。这就是为什么它们不包含我添加的模块的原因。在这个文件夹下,我有 5yasix1g.default-1475600224376 我的配置文件所在的位置,这就是我的 key3.dbcert8.dbsecmod.db 位于。

我把问题留在这里并更改标题以警告像我一样的人可能很难找到他们的 FF 个人资料所在的位置。


我设法让 NSS/JSS 在我的 Ubuntu 16.04 中工作,但它只找到一个模块,默认的 NSS 内部模块。

我安装了这些模块:

我必须加载的是 Izenpe 和 DNIe 之一。但是当我调试时,它只加载第一个。

modutil 与 NSS/NSPR 一起发布,我发现了相同的情况。检查

modutil -list -dbdir /home/myUserName/.mozilla/firefox

只显示一个模块。

(还有一点就是-dbdir的值应该以secmod.db所在的目录结尾,而不是文件本身,否则modutil会抛出令人困惑的错误信息,抱怨:

modutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format.

)

我知道我可以添加它们并且我正在这样做,但奇怪的是它在 FireFox 中列出但不在 secmod.db 中。这个文件不是FF使用的所有已安装模块的数据库吗?

另外,添加后无法访问外部模块。 modutil -dbdir "/some/dir/properly/quoted" -list 给我看这个:

easternfox@easternfox-Ubuntu:~$ modutil -dbdir /home/easternfox/.mozilla/firefox -list
Listing of PKCS #11 Modules
-----------------------------------------------------------
  1. NSS Internal PKCS #11 Module
     slots: 2 slots attached
    status: loaded

     slot: NSS Internal Cryptographic Services
    token: NSS Generic Crypto Services

     slot: NSS User Private Key and Certificate Services
    token: NSS Certificate DB

  2. Izenpe PKCS#11
    library name: /usr/lib/libbit4ipki.so
     slots: 1 slot attached
    status: loaded

     slot: Cherry GmbH SmartBoard XX44 [Smart Card Reader USB] 00 00
    token: Izenpe 0

我使用此代码加载 PKCS#11 提供程序:

if (OSUtil.isLinux()) {
    String config = "library=/usr/lib/i386-linux-gnu/nss/libsoftokn3.so\n"
    + "name=NSSCrypto-Firma\n"
    + "attributes=compatibility\n"
    + "slot=2\n"
    + "showInfo=true\n"
    + "allowSingleThreadedModules=true\n"
    + "nssArgs=\"configdir='" + NSS_JSS_Utils.getFireFoxProfilePath() + "' certPrefix='' keyPrefix='' secmod='secmod.db' + flags='readOnly'\" ";

    Provider provider = new SunPKCS11(new ByteArrayInputStream(config.getBytes()));
    Security.removeProvider("IAIK");
    //Security.addProvider(provider);
    Security.insertProviderAt(provider, 1);
    KeyStore.Builder builder = null;
    prevTryFailes = true;
    try {
        if (tries < 3 && prevTryFailes) {
            keystore = KeyStore.getInstance("PKCS11", provider);
            builder = KeyStore.Builder.newInstance("PKCS11", provider, new KeyStore.CallbackHandlerProtection(new UtilTarjetas(). new callback()));
            keystore = builder.getKeyStore();
            prevTryFailes = false;
        } 

        if (tries >= 3) {
            throw new KeyStoreException("Have entered 3 times password and not correct. ");
        }

    } catch (Exception e) {
        Traza.error(e);
        tries ++;
    }
}

假设在 config 中多次指定 name 属性 时抛出异常,我想我只能在 Provider 中加载一个模块。

并且,使用这些代码我初始化 CryptoManager:

try {
    InitializationValues iv = new InitializationValues(NSS_JSS_Utils.getFireFoxProfilePath());
    iv.installJSSProvider = false;
    CryptoManager.initialize(iv);
    cm = CryptoManager.getInstance();
} catch (KeyDatabaseException | CertDatabaseException | GeneralSecurityException | NotInitializedException e) {
    e.printStackTrace();
} catch (AlreadyInitializedException e) {
    cm = CryptoManager.getInstance();
}
CustomPasswordCallback pcb = new CustomPasswordCallback();
cm.setPasswordCallback(pcb);

Enumeration< ? > emModules = cm.getModules();

当它到达最后一行时,它只加载内部模块,不加载我的外部模块。

感谢任何帮助。谢谢!

我找到了这个问题的答案。

这是由于返回FireFox配置文件文件夹的方法不起作用,它只是定位到所有配置文件所在的目录,而没有进入我的配置文件文件夹。而在这个文件夹下(比如/home/myUserName/.mozilla/firefox/,还有key3.dbcert8.dbsecmod.db,但它们不包含任何用户特定的设置,我猜它们作为创建所有配置文件的基础。这就是为什么它们不包含我添加的模块的原因。

在这个文件夹下,我有 5yasix1g.default-1475600224376 我的个人资料所在的位置,这就是我的 key3.dbcert8.dbsecmod.db 所在的位置。

编辑

轻松找到您的个人资料文件夹:

Firefox 帮助 - 疑难解答信息...,这里是"Profile directory",点击打开目录.

或者,直接在方向栏中输入:

about:support