在Windows 7中将X509证书添加到商店

时间:2014-09-27 15:10:09

标签: delphi windows-7 certificate

在Windows XP和Vista下,我可以使用CapiCOM dll处理X509证书 但是,此路由已在Window 7(及更高版本)下弃用。

在Delphi帮助(XE6)中,我只能在Data.DBXCommon.TX509Certificate中找到X509代码,但这看起来与Windows证书库没有任何关系。

MSDN告诉我使用system.dllsystem.security.dll,但XE6似乎没有附带头文件:

(缺少system.dll头文件) No system/system.security header files included

如何翻译以下代码以便在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的代码,这将是一个奖励。

1 个答案:

答案 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

我没有亲身经历这样做,所以我可能会有很大的影响力。