我的生产中有多个 Windows 服务器。每次只有一个处于活动状态。加密命令在一台服务器上运行正常,但在另一台服务器上失败,并显示以下消息:
gpg: 没有默认密钥:没有密钥
gpg:D\Output\Outputfile.csv:签名+加密失败:没有密钥
我比较了两台机器上的密钥列表,gpg --list-keys
发现第二台服务器中缺少一个密钥,该密钥看起来像是用于签名的密钥。所以我添加了它。它仍然失败并出现相同的错误。
问题 1:我可以使用什么命令来查看 gpg 使用的默认密钥?我只找到了设置默认密钥的命令,但没有找到查看现有默认密钥的命令。
问题 2:设置 -v 命令(详细)后,日志中没有打印任何其他内容。是否还需要执行其他操作?
答案1
正如 GPG 文档所述,--list-keys
仅显示公钥,而不显示私钥。签名是用私钥而不是公钥完成的(您使用公钥进行加密和签名验证;私钥用于解密和签名)。我很确定您只是复制了公钥而没有复制私钥,所以现在您有了要用于签名的密钥的公钥部分,但没有私钥您就无法签名。
在 sign+encrypt 工作的服务器上运行gpg -K
(大写 K,相当于 --list-secret-keys),您将看到私钥。可能只有一个,如果只有一个,则自动为默认;如果有多个,您将在其中一个旁边看到一个小标记,以显示哪个是默认的。要导出私钥,请使用gpg --export-secret-keys
(您可能希望指定一个输出文件,可选 ASCII 装甲)。导出的密钥可以像 GPG 公钥一样导入(使用 --import)。确保您拥有私钥的密码,当然,永远不要将密钥放在其他人可以访问的地方。