Rad*_*dík 6 delphi mozilla xpcom pkcs#11 x509certificate
我想从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;
Run Code Online (Sandbox Code Playgroud)
使用此代码,我确实获得了certdb对象的实例,并且我可以向它请求证书.但是它似乎是完全空的(来自FindCertNicknames的计数为0)并且它也不会对更改OCSP做出反应(IsOcspOn总是返回true).我想我创建了新的certstore,或者我需要以某种方式激活默认用户配置文件.
我也尝试访问softokn.dll作为PKCS#11库.由于这似乎有某种PKCS#11 API,因此响应不佳.即C_Inititialize上的CKR_BAD_ARGUMENTS.
最后也是非常糟糕的方式是直接访问证书文件,因为它应该是"标准"NSS,但我真的不喜欢这种方式.
我对 PKCS#11 方式进行了更多探索,实际上我让它做了一些事情。softokn.dll 库“几乎”是标准 PKCS#11 库,请参阅https://developer.mozilla.org/en/PKCS11_Module_Specs。关键是您需要使用特殊参数来初始化它(结构在链接的 URL 中描述)。
检查 NSS 错误返回值也很方便:请参阅 CKR_NETSCAPE_...,位于http://people.mozilla.com/~chofmann/l10n/tree/mozilla/security/nss/cmd/pk11mode/pk11mode.c。
最后一个关键的事情是,您需要手动指定令牌,因为文档不清楚如何使用 secmod.db - 在“MOD DB 功能不是通过标准 PKCS #11 接口”中缺少一个词,可能是“支持” ”。
所有这些都是相当低级的编码,仍然需要大量工作,因此如果您从头开始,最好按照 Eugene 的建议使用 SecureBalackbox。