【发布时间】:2012-02-02 21:48:52
【问题描述】:
如何在不安装公钥的情况下验证 gpg 签名(cli 或 w/node js)?我确实有公钥,但不想将其添加到密钥环中。有什么提示吗?
谢谢, 弗洛里安
【问题讨论】:
标签: command-line signature gnupg
如何在不安装公钥的情况下验证 gpg 签名(cli 或 w/node js)?我确实有公钥,但不想将其添加到密钥环中。有什么提示吗?
谢谢, 弗洛里安
【问题讨论】:
标签: command-line signature gnupg
这是我用于此目的的 shell 脚本。它创建一个临时密钥环,在其中安装指定的公钥,运行指定的命令,然后删除临时密钥环。
请注意,这会从密钥服务器安装密钥。调整它以使用磁盘上已有的密钥应该不难(我应该添加一个选项来做到这一点)。
更新:见https://github.com/Keith-S-Thompson/gpg-tmp
#!/bin/sh
keyid=$1
shift
case "$keyid" in
????????)
;;
*)
echo "Usage: $0 key args..." 1>&2
exit 1
esac
tmp_keyring=$HOME/$keyid-keyring.gpg
gpg --no-default-keyring --keyring $tmp_keyring --recv-keys $keyid
gpg --no-default-keyring --keyring $tmp_keyring "$@"
rm -f $tmp_keyring
它的作用类似于gpg 命令,但需要一个额外的初始参数来指定 8 位密钥 ID。
示例用法:
$ gpg coreutils-8.9.tar.gz.sig
gpg: Signature made Tue 04 Jan 2011 07:04:25 AM PST using RSA key ID 000BEEEE
gpg: Can't check signature: public key not found
$ gpg-tmp 000BEEEE coreutils-8.9.tar.gz.sig
gpg: keyring `/home/kst/000BEEEE-keyring.gpg' created
gpg: requesting key 000BEEEE from hkp server subkeys.pgp.net
gpg: key 000BEEEE: public key "Jim Meyering <jim@meyering.net>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
gpg: Signature made Tue 04 Jan 2011 07:04:25 AM PST using RSA key ID 000BEEEE
gpg: Good signature from "Jim Meyering <jim@meyering.net>"
gpg: aka "Jim Meyering <meyering@gnu.org>"
gpg: aka "Jim Meyering <meyering@redhat.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 155D 3FC5 00C8 3448 6D1E EA67 7FD9 FCCB 000B EEEE
请记住,这绝对不会告诉您任何密钥的可信度,但它可用作完整性检查。
(我想知道 Jim Meering 在得到那个之前生成了多少个密钥。)
【讨论】:
我不需要太多,gpg --dry-run(或gpg -n)为我工作。我通过 Homebrew 在 Mac 上运行 gpg 1.4.12,但这似乎是一个标准选项。不知道它与这里提到的其他方法相比如何。
【讨论】:
gpg --dry-run coreutils-8.9.tar.gz.sig 给我“gpg: Can't check signature: public key not found”。 (我的钥匙圈里没有 Jim Meering 的钥匙。)
gpg --dry-run --trust-model direct --keyserver-options auto-key-retrieve --auto-key-locate keyserver --keyserver keys.gnupg.net --verify-options pka-lookups --verify coreutils-8.9.tar.gz.sig coreutils-8.9.tar.gz 但它坚持说gpg: Can't check signature: public key not found。好吧,我想如果你真的想避免使用脚本,你可以编写命令来代替使用临时 home/keyring 并在之后删除它。但 GPG 的重点是建立信任:这就是他们让这变得困难的原因。
verify-options pka-lookups 只是添加了额外的检查,它不会自动下载......)