我需要将我的一个 GPG 密钥导出为 PKCS12 密钥/证书。gpg
无法执行此操作,但该工具gpgsm
可以。但是,输入gpgsm -o <file> --export-secret-key-p12 <key-id>
会返回gpgsm: can't export secret key `<key-id>'
。我测试过gpgsm --list-keys
,它什么也没返回。
GPGSM 应该与 GPG 一起使用吗?我注意到,第一次运行它时,会为其创建一个新文件。我认为如果 GPG 已经运行并配置好了,就不必这样做了。两者都意味着可以访问同一个密钥环吗?如果是这样,我该如何解决这个问题?如果不是,我该如何从 GPG 导出密钥并将其导入 GPGSM?
答案1
描述一下会更有用为什么你想做点什么,而不仅仅是什么你想做什么。我猜你正在尝试将 PGP 密钥用于 S/MIME 电子邮件加密或签名,但这实际上是不可能的。
答案是,不是,GPG 和 GPGSM 使用不同的格式和协议,这就是为什么它们首先被实现为单独的工具。GPG 是 OpenPGP 的实现,而 GPGSM 适用于 X.509(主要是 S/MIME)。
虽然两者都使用相同的加密算法,并且可以理论上使用相同的密钥材料(例如相同的 RSA 参数),这就是相似之处——你不能将 OpenPGP 用户证书直接转换为 X.509 证书,因此您也无法以 PKCS#12 格式将其导出。
(gpg-agent 能够使用 OpenPGP 密钥进行 SSH 身份验证,但这只是因为 SSH 密钥格式不附加了元数据,因此“转换”只是提取 RSA 参数。另一方面,X.509 证书具有诸如主题名称之类的元数据,其语法与 OpenPGP 不同;发行者名称,而 OpenPGP 没有有(基于信任网);以及密钥的使用(这很棘手,因为大多数 OpenPGP 实现都使用二单个“证书”中的单独密钥,一个用于签名,一个用于加密)。
答案2
这不是对您的问题的直接回答,但是 CACert 发布了一个 Wiki 条目,详细说明了您想要做的事情。
本质上,您将使用从密钥对中导出的密钥生成证书签名请求,并获得由 CACert 等 CA 创建的证书。
我只是无法使用 gpgsm 在 Windows 上导出为 p12 文件格式,但在 Linux 上这不是问题。