2012-05-03 30 views
4

我幾乎失去了希望。 我試圖通過PKCS#11使用Firefox安裝附帶的NSS庫從Java 7訪問Firefox信任存儲。從Java訪問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」模塊在初始化步驟中未加載,但我不知道爲什麼。 這裏的文檔:說

的trustanchors模塊可以訪問NSS信任錨通過PKCS11密鑰庫 證書,如果secmod.db已配置 包括信任錨庫。

但我不知道這意味着什麼。 值得注意的是,我獲得了與Windows XP 32位和Ubuntu 11.10 64位相同的行爲。 似乎pkcs11.cfg是正確的,就好像我更改了應用程序將因其他錯誤而失敗的任何路徑。

任何好點子?

+0

找出secmod.db是什麼? http://www.mozilla.org/projects/security/pki/nss/tools/modutil.html – mazaneicha

+0

如果使用'modutil -list -dbdir /home/bogdan/.mozilla/firefox列出它,則會出現根證書模塊/ x5d8wol9.default /' – Bogdan

+0

我認爲這個問題與它認爲這個模塊使用庫「/home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so」這個事實有關,但是這個文件並沒有'不存在。我試圖複製它,現在我得到這個失敗:'在線程中的異常「main」java.security.ProviderException:庫/usr/lib/firefox/home/bogdan/.mozilla/firefox/x5d8wol9.default/libnssckbi.so不存在'(注意與LD_LIBRARY_PATH並置的奇怪路徑) – Bogdan

回答

1

我已經設法通過使用JSS4 Mozilla庫來解決問題。如果您想使用它,請確保您下載了JSS4 JAR以及本機庫實現以及它所具有的其他依賴項 - NSPR和NSS本機庫。

確保在Linux上本機庫的位置在LD_LIBRARY_PATH中,在Windows上它們的位置在%PATH%變量中。 您可能很想使用Firefox發行版附帶的DLL/SO。 這在我發現的Windows上不起作用(與我認爲它們是爲WIN95平臺編譯的事實有關)

其餘信息在JSS4庫的文檔中,但基本上需要使用org.mozilla.jss.CryptoManager類。