2012-05-03 9 views
4

私はこの1つにほとんど期待していません。 私は、PKCS#11を介して、Firefoxインストールに付属するNSSライブラリを使用して、Java 7からFirefox信頼ストアにアクセスしようとしています。ここでJavaからFirefoxの証明書トラストストアにアクセス

はコードです:私はまた-Djava.library.path=/usr/lib/firefox/

ときにプロパティを設定するアプリケーションを実行すると

name = NSS 
nssLibraryDirectory = /usr/lib/firefox/ 
nssSecmodDirectory = "/home/bogdan/.mozilla/firefox/x5d8wol9.default/" 
nssModule =trustanchors 
showInfo = true 

:ここ

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設定されています私は次のようなアプリケーションを実行します:

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」モジュールが初期化ステップでロードされていないことが実際に分かりますが、なぜその理由がわかりません。 ここでのドキュメントは:はsecmod.dbのは、トラストアンカーライブラリを含めるように を設定されている場合

trustanchorsモジュールは、 証明書PKCS11キーストアを経由してNSSのトラストアンカーへのアクセスを可能にすることを言います。

しかし、私はそれがどういう意味か分かりません。 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:Library /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クラスを使用する必要があります。

関連する問題