在Windows XP和Vista下,我可以使用CapiCOM dll处理X509证书 但是,此路由已在Window 7(及更高版本)下弃用。
在Delphi帮助(XE6)中,我只能在Data.DBXCommon.TX509Certificate中找到X509代码,但这看起来与Windows证书库没有任何关系。
MSDN告诉我使用system.dll
和system.security.dll
,但XE6似乎没有附带头文件:
(缺少system.dll头文件)
如何翻译以下代码以便在Windows 7下运行?
uses
Capicom_TLB, CapicomConst, ActiveX;
{$R *.dfm}
procedure TForm11.Button1Click(Sender: TObject);
var
CertificateFilename: PWideChar;
Store: TStore;
Certificate: ICertificate2;
Password: WideString;
begin
if FileOpenDialog1.Execute then begin
CertificateFilename:= StringToOleStr(FileOpenDialog1.FileName);
Store:= TStore.Create(Self);
try
Password:= '';
Store.Open(CAPICOM_LOCAL_MACHINE_STORE, CAPICOM_ROOT_STORE, CAPICOM_STORE_OPEN_READ_WRITE);
Certificate:= TCertificate.Create(Self) as ICertificate2;
Certificate.Load(CertificateFilename^, Password, CAPICOM_KEY_STORAGE_DEFAULT, CAPICOM_LOCAL_MACHINE_KEY);
Store.Add(Certificate as ICertificate2);
finally
Store.Close;
SysFreeString(CertificateFilename);
end;
end;
end;
如果我能获得从Windows XP到Windows 8/9的代码,这将是一个奖励。
答案 0 :(得分:1)
根据我的网络搜索,Crypto API是您正在寻找的非托管接口。我怀疑CryptUIWizImport
可能是最简单的方法来满足您的需求。
本文提供了一些简单的代码,演示了如何调用函数:http://blogs.msdn.com/b/alejacma/archive/2008/01/31/how-to-import-a-certificate-without-user-interaction-c-c.aspx
我没有亲身经历这样做,所以我可能会有很大的影响力。