2011-11-18 94 views
6

我想从Delphi(XE)应用程序访问存储在Mozilla产品(Firefox和Thunderbird)中的证书。首先,我想列出它们,接下来能很好地管理它们(导入,导出,删除)并使用它们(签名)。虽然使用mozilla支持的所有令牌会很好,但软件令牌就足够了。从Delphi访问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库。由于这似乎有某种PKCS#11 API,所以它没有很好的响应。即C_Inititialize上的CKR_BAD_ARGUMENTS。

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

回答

0

我探索了更多的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 DB功能不是通过标准PKCS#11接口“。

所有这些都是相当低级的编码,并且仍然需要很多工作,所以如果您从头开始,使用Eugene建议的SecureBalackbox可能会更好。

1

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