【发布时间】:2011-11-18 18:59:54
【问题描述】:
我想从 Delphi (XE) 应用程序访问存储在 Mozilla 产品(Firefox 和 Thunderbird)中的证书。首先,我想列出它们,接下来最好能够管理它们(导入、导出、删除)并使用它们(签名)。软件令牌就足够了,尽管使用 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)。我在想我要么创建了新的 certstore,要么需要以某种方式激活默认用户配置文件。
我还尝试将 softokn.dll 作为 PKCS#11 库访问。由于这似乎具有某种 PKCS#11 API,因此响应不佳。 IE。 C_Initialize 上的 CKR_BAD_ARGUMENTS。
最后一个也是非常糟糕的方法是直接访问证书文件,因为它应该是“标准”NSS,但我真的不喜欢这种方式。
【问题讨论】:
标签: delphi mozilla x509certificate xpcom pkcs#11