如何使用 GnuPG 以 PEM 格式导出公钥?

Mik*_*key 8 openssl public-key gnupg

我正在编写使用 opessl 库来验证 DSA 签名的软件。我有来自发件人的 gpg 格式的公钥。如何将它们转换为 .pem 以便 openssl 可以读取它们?

我从另一个线程找到了这个:

gpgsm -o secret-key.p12 --export-secret-key-p12 0xXXXXXXXX 
Run Code Online (Sandbox Code Playgroud)

要进行导出,我需要将密钥放在 gpgsm 钥匙圈中,不是吗?我只是不知道如何将我的密钥导入 gpgsm 正在使用的密钥环。我最终遇到错误:

gpgsm --import public.asc
gpgsm: total number processed: 0
gpgsm: error importing certificate: End of file
Run Code Online (Sandbox Code Playgroud)

可以gpgsm以某种方式使用 gpg:s 密钥环并从那里进行导出吗?

Sky*_*RaT 0

您的导出命令是正确的,但正如您所想, 的gpgsm密钥环是空的。您可以通过以下方式检查:

gpgsm --list-keys
Run Code Online (Sandbox Code Playgroud)

输出将是什么也没有。

对于你的最后一个问题:不。gpggpgsm使用不同的数据库。更多信息请参见此处。您必须创建或获取 OpenSSL 密钥/证书对并将其(以 PKCS#12 格式)导入 gpgsm 密钥环(通常~/.gnupg/pubring.kbx),因此导入命令必须是:

gpgsm --import mycert.p12
Run Code Online (Sandbox Code Playgroud)

您可以从一个系统导出密钥,将其转换并导入到另一个系统,但所谓的转换仅提供元信息(在大多数情况下),并且正在使用该元信息创建一个全新的证书/密钥。您可以在此处查看转换示例。