Доступ к хранилищу сертификатов Firefox из Java
Я почти теряю надежду на это. Я пытаюсь получить доступ к хранилищу доверия Firefox из Java 7, используя библиотеки NSS, которые поставляются с установкой Firefox, через PKCS # 11.
Вот код:
<code>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()); } } } </code>
Вот содержимое для конфигурации PKCS # 11:
<code>name = NSS nssLibraryDirectory = /usr/lib/firefox/ nssSecmodDirectory = "/home/bogdan/.mozilla/firefox/x5d8wol9.default/" nssModule =trustanchors showInfo = true </code>
Когда я запускаю приложение, я также устанавливаю свойство-Djava.library.path=/usr/lib/firefox/
Когда я запускаю приложение, я получаю следующее:
<code>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) </code>
На самом деле вы можете видеть, что "trustanchors" модуль не загружается на этапе инициализации, но я понятия не имею, почему. Документация здесь:http://docs.oracle.com/javase/6/docs/technotes/guides/security/p11guide.html#NSS Говорит, что
The trustanchors module enables access to NSS trust anchor certificates via the PKCS11 KeyStore, if secmod.db has been configured to include the trust anchor library.
но я понятия не имею, что это значит. Стоит отметить, что я получаю одинаковое поведение как с 32-битной Windows XP, так и с 64-битной Ubuntu 11.10. Кажется, что файл pkcs11.cfg правильный, как если бы я изменил любой из путей, приложение потерпит неудачу с другими ошибками.
Какие-нибудь яркие идеи?