【问题标题】:Adding a X509 certificate to the store in Windows 7在 Windows 7 中将 X509 证书添加到存储区
【发布时间】:2014-11-22 10:30:58
【问题描述】:

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

在 Delphi 帮助 (XE6) 中,我只能在 Data.DBXCommon.TX509Certificate 中找到 X509 代码,但这看起来与 Windows 证书存储无关。

MSDN 告诉我使用system.dllsystem.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 的代码,那将是一个奖励。

【问题讨论】:

    标签: delphi windows-7 certificate


    【解决方案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

    我没有这方面的个人经验,所以我可能不太了解。

    【讨论】:

    • 从 MSDN 文章中的描述来看,它看起来是正确的。让我看看我能不能弄清楚这个函数存在于哪个 dll 中。
    • CryptUI.dll:function CryptUIWizImport(dwFlags: DWORD; HWndParent: HWND; WizardTitle: PWideString; ImportSrc: PCCRYPTUI_WIZ_IMPORT_SRC_INFO; hDestCertStore: THandle): BOOL; stdcall; external 'CryptUI.dll';
    • 我尝试使用 CryptUI dll 函数,但使用的结构非常复杂,以至于这种方法根本不可行。将尝试使用命令行方法。
    • 这完全取决于你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多