Я хотел бы получить доступ к сертификатам, хранящимся в продуктах 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, но мне этот способ действительно не нравится.