Доступ к сертификатам Mozilla от Delphi - PullRequest
6 голосов
/ 18 ноября 2011

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

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

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Наш SecureBlackbox работает с softtokn.dll через PKCS # 11, и вы можете использовать интерфейсы, предоставляемые SecureBlackbox, для удобного управления сертификатами.

0 голосов
/ 19 ноября 2011

Я немного больше изучил PKCS # 11 и действительно заставил его что-то делать.Библиотека softokn.dll является «почти» стандартной библиотекой PKCS # 11, см. https://developer.mozilla.org/en/PKCS11_Module_Specs.Ключевым моментом является то, что вам нужно инициализировать его специальными аргументами (структура описана в связанном URL).

Также удобно проверять возвращаемые значения NSS erorr: см. CKR_NETSCAPE _... at http://people.mozilla.com/~chofmann/l10n/tree/mozilla/security/nss/cmd/pk11mode/pk11mode.c.

Последнее, что вам нужно, это указать вручную токены, так как в документации неясно, что такое secmod.db - в «MOD» отсутствует слово, которое, вероятно, «поддерживается».Функция БД не осуществляется через стандартные интерфейсы PKCS # 11 ".

Все это довольно низкоуровневое кодирование и все еще потребует много работы, поэтому может быть лучше использовать SecureBalackbox, как предложил Евгений, если вы начинаете с нуля.

...