Доступ к сертификатам Mozilla из Delphi

Я хотел бы получить доступ к сертификатам, хранящимся в продуктах Mozilla (Firefox и Thunderbird), из приложения Delphi (XE). Для начала я хотел бы перечислить их, затем было бы неплохо иметь возможность управлять ими (импортировать, экспортировать, удалять) и использовать их (подписать). Программного токена будет достаточно, хотя использование всех токенов, поддерживаемых Mozilla, было бы замечательно.

До сих пор я пробовал использовать XPCOM с http://d-gecko.svn.sourceforge.net/viewvc/d-gecko/trunk/ привязкой delphi. Однако документации не так много, и меня немного смущает вся терминология и концепции. Лучшее, что я мог сделать, это:

    var ns:nsIX509CertDB;
      servMgr:nsIServiceManager;
      p:Pchar;
    begin
      GRE_Startup;
      NS_GetServiceManager(servmgr);
      servMgr.GetServiceByContractID('@mozilla.org/security/x509certdb;1',NS_IX509CERTDB_IID,ns);
      ns.FindCertNicknames(nil,1,count,p);
      GRE_Shutdown;
    end;

Используя этот код, я получил экземпляр объекта certdb и смог запросить у него сертификаты.Однако он кажется полностью пустым (счетчик FindCertNicknames равен 0), и он также не реагирует на изменение OCSP (IsOcspOn всегда возвращает true). Я думаю, что либо создал новое хранилище сертификатов, либо мне нужно как-то активировать профиль пользователя по умолчанию.

Я также пробовал получить доступ к softokn.dll как к библиотеке PKCS # 11. Поскольку у него, похоже, есть какой-то API PKCS # 11, он плохо реагирует. Т.е. CKR_BAD_ARGUMENTS на C_Initialize.

Последний и действительно плохой способ - это доступ к файлам сертификатов напрямую, поскольку это должен быть «стандартный» NSS, но мне этот способ действительно не нравится.

6
задан Radek Hladík 18 November 2011 в 18:59
поделиться