我正在使用 gpg4win,并尝试将我的 gpg 私钥导出为 p12 格式(以便将其导入 Lotus Notes)。根据我的理解,我需要:
gpgsm.exe -o "XXXXXXXX_private.p12" --export-secret-key-p12 0xXXXXXXXX
但是,我收到以下错误:“没有密钥”实际上,gpgsm -K 根本没有返回任何内容(gpg -K 有效)。
我错过了什么?
答案1
我认为你使用了错误的程序;pgpsm
用于使用 S/MIME 协议签名、检查、加密或解密。
我手头没有pgp4win
,但根据手册页,这将导出你的公钥和密钥:
gpg -o XXXXXXX_private.p12 --export [key id] --export-format pkcs12 --cert
相关信息pkcs12
如下,
pkcs12
仅输出二进制块;默认文件扩展名为 .p12;签名密钥必须成对;输入必须与一个密钥完全匹配。在这种情况下,需要 --cert。
所以我加入了这个--cert
选项,但没有仔细考虑这个选项:
--cert
如果签名密钥可用,则此选项为 X.509 发行者长名称或 32 位或 64 位密钥 ID。
我做了一些测试(现在用的是 gpg4win),但有些地方不得不自相矛盾。gpg4wingpgsm
中的工具描述如下
gpgsm 是一个类似于 gpg 的工具,用于为 X.509 证书和 CMS 协议提供数字加密和签名服务。它主要用作 S/MIME 邮件处理的后端。
这听起来确实正确。
因此,您在问题中发布的命令似乎完全合理,我只剩下两个线索:
- 您可以尝试通过选项使用 ASCII 装甲
-a
输出 - 并且有一个有关导出密钥的字符集的选项,这通常是(特别是较旧的)Windows 程序的问题:
--p12-charset name
gpgsm 使用 UTF-8 编码 PKCS#12 文件的密码时使用的编码。此选项可用于强制以指定的编码名称对密码进行编码。 如果用于导入密钥的应用程序使用不同的编码,因此无法导入由 gpgsm 生成的文件,则此功能很有用。 名称的常用值为拉丁语1和CP850。请注意,gpgsm 本身会自动导入任何使用最常用编码的密码文件。
答案2
答案可能只是指的是该程序的旧版本,但我能够使用此命令导出
gpgsm -o output.p12 --export-secret-key-p12 [keyID]