2012-05-16 3 views
0

Я пытаюсь разработать расширение FF, которое вызывает nsIX509CertDB.nsIX509CertDB. При вызове этой функции из xpcshell я получаю сообщение об ошибке 0x80004005 (NS_ERROR_FAILURE). Я подозреваю, что это сбой, поскольку в среде xpcshell я не могу запросить пароль. Есть ли способ предоставить его из командной строки?Ошибка при вызове nsIX509CertDB.nsIX509CertDB из командной строки

Мой код:

if(nsIFile != null && nsIFile.exists()) { 
     var certDB = Cc["@mozilla.org/security/x509certdb;1"] 
             .getService(Ci.nsIX509CertDB); 
     certDB.importPKCS12File(null, nsIFile); 
} 
+1

Я думаю, что эквивалентные инструменты командной строки NSS не будут делать? –

ответ

1

Это, скорее всего, включать написание кода для замены @mozilla.org/nsCertificateDialogs;1 компонента (реализации nsICertificateDialogs interface). Затем вы можете реализовать метод getPKCS12FilePassword любым способом.

Проще всего использовать pk12util tool, входящий в состав NSS. Если это действительно необходимо сделать через xpcshell, конечно.

+0

Это модульный тест плагина firefox. Так что я действительно хотел бы иметь его там ... Спасибо за ваш ответ до сих пор! Я пытаюсь переопределить nsICertificateDialogs. Не могли бы вы дать мне какие-либо подсказки о том, как зарегистрировать мою реализацию? –

+0

Вы должны использовать [nsIComponentRegistrar.registerFactory()] (https://developer.mozilla.org/en/nsIComponentRegistrar) (для получения этой услуги используйте 'Components.manager.nsIComponentRegistrar'). Сначала вам нужно сначала отменить регистрацию старой фабрики (используйте 'nsIComponentRegistrar.unregisterFactory') - для этого вам понадобится CID существующей реализации (используйте' nsIComponentRegistrar.contractIDToCID') и ее фабрику (используйте ['Components.manager.getClassObject (..., Components.interfaces.nsIFactory) '] (https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIComponentManager#getClassObjectByContractID%28%29). –

+0

Это, похоже, не работает для меня, см. Http: //stackoverflow.com/questions/11988107/replace-nsicertificatedialogs-from-firefox-extension –