4

私はこれでほとんど希望を失っています。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());
        }
    }
}

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はそれを言います

trustanchors モジュールは、secmod.db がトラスト アンカー ライブラリを含むように構成されている場合、PKCS11 キーストアを介して NSS トラスト アンカー証明書にアクセスできるようにします。

しかし、それが何を意味するのかわかりません。Windows XP 32 ビットと Ubuntu 11.10 64 ビットの両方で同じ動作が得られることは注目に値します。アプリケーションが他のエラーで失敗するパスのいずれかを変更したかのように、pkcs11.cfg は正しいようです。

明るいアイデアはありますか?

4

1 に答える 1

1

最終的には、JSS4Mozillaライブラリを使用して問題を解決することができました。使用する場合は、JSS4 JARと、ネイティブライブラリの実装およびその他の依存関係(NSPRおよびNSSネイティブライブラリ)をダウンロードしてください。

Linuxではネイティブライブラリの場所がLD_LIBRARY_PATHにあり、Windowsではそれらの場所が%PATH%変数にあることを確認してください。Firefoxディストリビューションに付属しているDLL/SOを使用したくなるかもしれません。これは私が見つけたWindowsでは機能しません(私が思うに、それらがWIN95プラットフォーム用にコンパイルされたという事実と関係があります)

残りの情報はJSS4ライブラリのドキュメントにありますが、基本的にはorg.mozilla.jss.CryptoManagerクラスを使用する必要があります。

于 2012-05-09T13:46:55.950 に答える