@vhallac 的答案现在已过时(我正在尝试验证 emacs-24.4 下载)。如果您不想下载和导入整个 GNU 密钥环(正如 @JSON 所讨论的那样),这里有一种方法可以完成此操作。在这个答案中,我将展示今天有效的方法,以及如何确定一年后有效的方法。
首先下载 emacs 及其 .sig 文件。我有:
$ ls | grep emacs
emacs-24.4.tar.xz
emacs-24.4.tar.xz.sig
假设您已经安装了 gpg,请尝试验证它:
$ gpg --verify emacs-24.4.tar.xz.sig
gpg: Signature made Mon 20 Oct 2014 02:58:21 PM EDT using RSA key ID A0B0F199
gpg: Can't check signature: public key not found
在此尝试中,它失败了(您将在本文末尾看到成功的尝试)。我没有公钥。输出告诉您需要获取哪个公钥:A0B0F199。 (这是未来最有可能改变的事情。)
然后我尝试使用默认命令下载它:
$ gpg --recv-keys A0B0F199
gpg: requesting key A0B0F199 from hkp server keys.gnupg.net
(...hangs here...)
它只是挂起。那是因为我有ufw(我的 Linux 防火墙软件)阻止了大多数端口。您可以告诉 gpg 使用端口 80,如下所示:
$ gpg --keyserver hkp://keys.gnupg.net:80 --recv-keys A0B0F199
gpg: requesting key A0B0F199 from hkp server keys.gnupg.net
gpgkeys: key A0B0F199 not found on keyserver
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
它通过了防火墙,但由于某种原因,Emacs/FSF 密钥不再存储在 gnupg 服务器上而失败。所以我尝试了另一个我知道并且有一定程度信任的密钥服务器:
$ gpg --keyserver hkp://pool.sks-keyservers.net:80 --recv-keys A0B0F199
gpg: requesting key A0B0F199 from hkp server pool.sks-keyservers.net
gpg: key A0B0F199: public key "Glenn Morris <rgm@gnu.org>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
好的,成功了。现在检查一下:
$ gpg --list-keys
...
pub 2048R/A0B0F199 2012-12-23 [expires: 2015-12-23]
uid Glenn Morris <rgm@gnu.org>
sub 2048R/951C59EC 2012-12-23 [expires: 2015-12-23]
是的,明白了。
现在我可以验证下载的 emacs tarball:
$ gpg --verify emacs-24.4.tar.xz.sig
gpg: Signature made Mon 20 Oct 2014 02:58:21 PM EDT using RSA key ID A0B0F199
gpg: Good signature from "Glenn Morris <rgm@gnu.org>"
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: B294 26DE FB07 724C 3C35 E5D3 6592 E9A3 A0B0 F199
签名是“好的”,但不受信任。请参阅其他答案以了解如何信任该密钥。