Delphi 如何从pfx中提取私钥和证书?

Delphi 如何从pfx中提取私钥和证书?,delphi,openssl,crypt,pkcs#12,Delphi,Openssl,Crypt,Pkcs#12,我正在尝试读取.PFX文件的私钥和证书。 我需要两者都使用此单元()的MimeSign方法对消息进行签名。 我正在使用这个代码 procedure ReadKeyFromPFX(PFXFileName: TFileName); var Certfile: pBIO; PFX: pPKCS12; PCert : PX509; POtherCerts : pSTACK_OFX509; PKey : pEVP_PKEY; Suce

我正在尝试读取.PFX文件的私钥和证书。 我需要两者都使用此单元()的MimeSign方法对消息进行签名。 我正在使用这个代码

procedure ReadKeyFromPFX(PFXFileName: TFileName);    
 var
     Certfile: pBIO;
     PFX: pPKCS12;
     PCert : PX509;
     POtherCerts : pSTACK_OFX509;
     PKey  : pEVP_PKEY;
     Sucesso : Integer;
  begin
     Certfile := BIO_new(BIO_s_file());
     BIO_read_filename(Certfile, PAnsiChar(AnsiString(PFXFileName)));
     PFX := d2i_PKCS12_bio(Certfile, nil);
     Sucesso := PKCS12_parse(PFX, nil , PKey, PCert, POtherCerts);
     fCertificate := PCert;
     fKey         := PKey;
  end;
Sucesso返回0,根据openssl文档,这意味着一个错误(),但是如果我调用
ERR\u error\u string(ERR\u get\u error,@ErrMsg)我得到的只是这个


我不知道该库,但由于错误中有太多的零,似乎无法加载某些库/dll。您的库是否依赖于openSSL DLL?它能找到那些吗?不仅是libaey.pas单位,还有?是的。它使用libeayReading读取文档,似乎这是错误0的描述。当队列中不再有错误时,从ERR_get_error返回0,表示没有出现任何错误。这与Suceso中的0冲突,当然。。。我真的看不出有什么问题,但也许您可以尝试使用
TX509Certificate.LoadFromFile
,它似乎与您正在做的一样,但需要更多的处理。好的。我将尝试在这里分享结果。谢谢你,我也发现了这一点,以达到类似的效果。也许不是您想要的最终解决方案,但至少它可以提供一些关于代码或.pfx文件错误的见解。我不知道该库,但由于错误中有太多的零,看起来有些库/dll无法加载。您的库是否依赖于openSSL DLL?它能找到那些吗?不仅是libaey.pas单位,还有?是的。它使用libeayReading读取文档,似乎这是错误0的描述。当队列中不再有错误时,从ERR_get_error返回0,表示没有出现任何错误。这与Suceso中的0冲突,当然。。。我真的看不出有什么问题,但也许您可以尝试使用
TX509Certificate.LoadFromFile
,它似乎与您正在做的一样,但需要更多的处理。好的。我将尝试在这里分享结果。谢谢你,我也发现了这一点,以达到类似的效果。也许并不是您想要的最终解决方案,但至少它可以让您了解代码中或.pfx文件中的错误。