2012-02-02 74 views
7

如何在不安装公钥的情况下验证gpg签名(cli或w/node js)?我有公钥,但不想将其添加到密钥环中。任何提示?验证gpg签名而不安装密钥

感谢, 弗洛里安

回答

6

这里有一个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 "[email protected]" 
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 <[email protected]>" 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 <[email protected]>" 
gpg:     aka "Jim Meyering <[email protected]>" 
gpg:     aka "Jim Meyering <[email protected]>" 
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 

请记住,这告诉你绝对没有关于密钥的可信度,但它是作为一个完整性检查是有用的。

(我不知道吉姆Meyering多少个键产生之前,他得到了一个。)

2

我并不需要太多,gpg --dry-run(或gpg -n)为我工作。我通过Homebrew在Mac上运行gpg 1.4.12,但它似乎是一个标准选项。不知道它与这里提到的其他方法相比如何。

+0

这对我不起作用(gpg 1.4.16,Linux Mint 17)。 'gpg --dry-run coreutils-8.9.tar.gz.sig'给我“'gpg:无法检查签名:找不到公钥”。 (我的钥匙圈里没有Jim Meyering的钥匙。) – 2014-10-06 20:43:05

+0

呵呵。你是对的。两年后,我无法复制它。我尝试过每一个例如'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:无法签名:找不到公钥'。那么,我想如果你真的想避免一个脚本,你可以编写命令来改为使用临时的home/keyring,然后删除它。但是,GPG的重点在于建立信任:这就是为什么他们要做到这一点。 – 2014-10-06 22:33:40

+0

在GPG的辩护中,它确实表示“--dry-run”已经实施了一半,这当然是您想要在这样的安全功能中看到的。在这里,干运行防止命令添加到密钥环,这意味着验证不知道使用什么密钥(显然)。当我使用它时,我必须已经添加了一个密钥,所以“干运行”基本上没有,我想。 (哦,'验证选项pka-lookups'只是增加了额外的检查,它不会自动下载...) – 2014-10-06 22:35:30