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 に答える