【发布时间】:2014-03-03 14:57:27
【问题描述】:
尝试使用 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-----
【问题讨论】:
-
你能确认公钥是PEM格式吗?
cat看看你是否看到--- BEGIN PUBLIC KEY ---。如果是DER格式,请将-outform PEM添加到openssl rsa命令中。如果您是 PEM 格式,请尝试将--- BEGIN PUBLIC KEY ---更改为--- BEGIN RSA PUBLIC KEY ---。 -
我将 public.pem 文件的内容添加到问题中。我还将 --- BEGIN PUBLIC KEY --- 更改为 --- BEGIN RSA PUBLIC KEY --- 仍然与我在问题中提到的错误相同。但后来我也将结束标记更改为 -----END RSA PUBLIC KEY----- 导致新错误:“error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag”
-
如果你运行 c:\OpenSSL-Win32\bin\openssl x509 -in public.pem -inform PEM -noout -text,你的公共 PEM 的文本形式会说什么
-
运行命令后,我收到此错误:“无法加载证书 7572:error:0906D06C:PEMroutines:PEM_read_bio:no start line:.\crypto\pem\pem_lib”.c:703 :期待: 可信证书
-
Saeed/Jan - 这可能是行尾的问题吗?