1

尝试使用 Lockbox 3 在 Delphi 中加载 RSA 公钥时遇到此错误:“(错误)公钥文件损坏、为空或类型错误。” 我使用以下命令通过 OpenSSL 生成了一对公钥和私钥:

openssl genrsa -out private.pem 2048   //generate private key
openssl rsa -pubout -in private.pem -out public.pem //generate public key

然后在 Delphi 中,我使用以下代码加载 libeay32.dll:

  sig: TOpenSSL_Signatory;       
  ...
  Sig.Clear;
  Sig.isLoaded := True;
  if Sig.isLoaded then ShowMessage('The OpenSSL library libeay32.dll was loaded successfully.');

总是成功加载。然后我使用下面的代码来加载公钥(即public.pem):

f:=TFileStream.Create('c:\keys\public.pem', fmOpenRead);
sig.LoadKeysFromStream(f, [partPublic]);
f.Free;

上面的代码导致以下错误:“(错误)公钥文件损坏,为空或类型错误。”

如何解决这个问题并将OpenSSL生成的公钥成功加载到Delphi?

public.pem 如下所示:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz98tqhhArIOoTtO3HFDW
TcQz4EcSBIc3YejV9GPQq+gMdqO5VsmQhOfHyWAMwOVJ49w/fGib+zyIPmocwCqE
jnQ5UjpNhkO5JIDmlf5NZGI2JcuORg+4Anqgo0D4YGCY04w7Sk8dArLHK+PThPwC
uM2XqyRCpcyTsWRKcH5/G6k6OBBhj5kIeNOy+ZCLeADhNUNiEBXdHQWoMbC+x8Fk
E73KzoOg61BQ7HBMJmfK2p8Shi/wEqD1DPJK3IKkTS+KAB8LvLXdUTDHg1O6FbDn
FfSQWYXzV5MWZR7M3POyX6rjoGRFK+v3mG08S5qEPj/l/PBgNL6wI/aBNkFsYxgf
7QIDAQAB
-----END PUBLIC KEY-----
4

1 回答 1

2

方法TOpenSSL_Signatory.LoadKeysFromStream()期望密钥以...结尾

-----END RSA PUBLIC KEY-----

此方法要求密钥采用 PEM (SSLeay) 格式。SSLeay PEM 具有标记为-----BEGIN/END RSA PUBLIC/PRIVATE KEY-----的 base64 内容。

要生成传统 PEM 格式的密钥,请参阅...

您不能简单地通过重命名页眉/页脚来更改格式。您实际上必须通过将正确的选项传递给 OpenSSL 来生成 SSLeay PEM。

于 2014-03-05T00:07:08.997 回答