从Delphi访问Mozilla证书

时间:2011-11-18 18:59:54

标签: delphi mozilla x509certificate xpcom pkcs#11

我想从Delphi(XE)应用程序访问存储在Mozilla产品(Firefox和Thunderbird)中的证书。首先,我想列出它们,接下来能够管理它们(导入,导出,删除)并使用它们(符号)会很好。虽然使用mozilla支持的所有令牌都很棒,但软件令牌已经足够了。

到目前为止,我尝试使用带有http://d-gecko.svn.sourceforge.net/viewvc/d-gecko/trunk/ delphi绑定的XPCOM。然而,周围没有太多的文档,我有点混淆所有的术语和概念。我能做的最好的事情是:

    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)。我想我创建了新的certstore,或者我需要以某种方式激活默认用户配置文件。

我也尝试访问softokn.dll作为PKCS#11库。由于这似乎有某种PKCS#11 API,因此响应不佳。即C_Inititialize上的CKR_BAD_ARGUMENTS。

最后也是非常糟糕的方式是直接访问证书文件,因为它应该是“标准”NSS,但我真的不喜欢这种方式。

2 个答案:

答案 0 :(得分:1)

我们的SecureBlackbox通过PKCS#11与softtokn.dll配合使用,您可以使用SecureBlackbox提供的接口进行方便的证书管理。

答案 1 :(得分:0)

我更多地探索了PKCS#11的方式,我实际上已经做了一些事情。 softokn.dll库是“几乎”标准的PKCS#11库,请参阅https://developer.mozilla.org/en/PKCS11_Module_Specs。关键是你需要用特殊参数初始化它(结构在链接的URL中描述)。

检查NSS erorr返回值也很方便:参见http://people.mozilla.com/~chofmann/l10n/tree/mozilla/security/nss/cmd/pk11mode/pk11mode.c的CKR_NETSCAPE _...。

最后一个关键是你需要手动指定令牌,因为文档不清楚使用secmod.db - 在“MOD DB功能不通过标准PKCS”中有一个缺失的词,可能是“支持” #11接口“。

所有这些都是相当低级的编码,并且仍然需要大量工作,因此如果你从头开始,最好使用Eugene建议的SecureBalackbox。