![将没有用户 ID 的 PGP 密钥导入到 gpg 中](https://linux22.com/image/181824/%E5%B0%86%E6%B2%A1%E6%9C%89%E7%94%A8%E6%88%B7%20ID%20%E7%9A%84%20PGP%20%E5%AF%86%E9%92%A5%E5%AF%BC%E5%85%A5%E5%88%B0%20gpg%20%E4%B8%AD.png)
我的公司使用 Authora Edge 来创建/管理 pgp 密钥。该公司意外关闭,我们正在将现有密钥迁移到 gpg 中。
当尝试导入公钥时,我收到以下错误:
# gpg --import ./Feedback-RSA-4096.public.asc
gpg: key 5DE4473F: no valid user IDs
gpg: this may be caused by a missing self-signature
gpg: Total number processed: 1
gpg: w/o user IDs: 1
但是,我可以通过使用 --allow-non-selfsigned-uid 解决此问题:
# gpg --allow-non-selfsigned-uid --import ./Feedback-RSA-4096.public.asc
gpg: key 5DE4473F: accepted non self-signed user ID "Feedback-RSA-4096.public.asc"
gpg: key 5DE4473F: public key "Feedback-RSA-4096.public.asc" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
不幸的是,这在导入密钥时不起作用:
# gpg --expert --allow-non-selfsigned-uid --import Feedback-RSA-4096.private.txt
gpg: key 5DE4473F: no user ID
gpg: Total number processed: 1
gpg: secret keys read: 1
知道如何将密钥导入 gpg 吗?我读到我可以使用专家模式,但到目前为止我的尝试没有成功。
答案1
确实,GnuPG 不会导入没有用户 ID 的密钥。幸运的是,这个--allow-non-selfsigned-uid
选项成功了好简单只是发明一个临时用户 ID 并在导入之前将其作为短字节字符串写入文件。在本例中,我将使用用户 ID“foobar”,因此字节串将为\xb4\x06foobar
.
为了使其工作,密钥文件必须采用二进制格式 -没有 ASCII 装甲。如果该文件可以用普通文本编辑器读取并且以 开头-----BEGIN PGP PRIVATE KEY BLOCK-----
,那么它是 ascii 装甲的并且需要转换。如果它已经是二进制的,您应该制作一个副本。
如果原始密钥文件是 ascii-armored,则创建一个二进制副本:
gpg -o Feedback-RSA-4096.private.gpg --dearmor Feedback-RSA-4096.private.txt
否则,如果原始密钥文件是二进制文件,则创建一个重命名的二进制副本:
cp Feedback-RSA-4096.private.txt Feedback-RSA-4096.private.gpg
无论您使用上述哪个命令,都将创建名为 的密钥文件的二进制副本Feedback-RSA-4096.private.gpg
。这样,如果出现问题,您就不会弄乱您的原始密钥文件。
将用户 ID 字节字符串附加到二进制副本:
printf '\xb4\x06foobar' >> Feedback-RSA-4096.private.gpg
使用以下选项导入密钥文件--allow-non-selfsigned-uid
:
gpg --allow-non-selfsigned-uid --import Feedback-RSA-4096.private.gpg
快完成了...
具有非自签名用户 ID 的密钥的功能受到严重限制,因此导入密钥后,您必须使用它gpg --edit-key foobar
来进入编辑模式。进入编辑模式后,在gpg>
提示符处输入adduid
并按照屏幕上的提示添加真实(自签名)用户 ID。添加用户 ID 后,当仍处于编辑模式时,按gpg>
提示输入1
选择“foobar”用户ID(*
名称旁边将有 表示已选择),然后输入deluid
并确认删除该用户 ID。最后输入save
保存更改并退出密钥编辑模式。
请注意,密钥数据包中始终包含相应的公钥数据包,因此导入包含密钥的文件也会导入公钥。这意味着您可以跳过导入公钥文件的步骤,而只导入私钥文件。