如何使用 .sig 文件验证下载的文件?

Posted

技术标签:

【中文标题】如何使用 .sig 文件验证下载的文件?【英文标题】:How to verify downloaded file with .sig file? 【发布时间】:2013-02-26 04:23:04 【问题描述】:

当我下载 GCC 时,它还有一个.sig 文件,我认为它是用来验证下载文件的。 (我从here下载了GCC)。

但我不知道应该如何使用它。我试过gpg,但它抱怨公钥。

[root@localhost src]# gpg --verify gcc-4.7.2.tar.gz.sig gcc-4.7.2.tar.gz
gpg: Signature made Thu 20 Sep 2012 07:30:44 PM KST using DSA key ID C3C45C06
gpg: Can't check signature: No public key
[root@localhost src]# 

如何使用.sig 文件验证下载的文件?

【问题讨论】:

【参考方案1】:

您需要导入公钥:C3C45C06

可以分三步完成。

    查找公钥 ID:

    $ gpg gcc-4.7.2.tar.gz.sig gpg: Signature made Čt 20. září 2012, 12:30:44 CEST using DSA key ID C3C45C06 gpg:无法检查签名:没有公钥

    从密钥服务器导入公钥。通常不需要选择密钥服务器,但可以使用--keyserver <server>。 Keyserver examples.

    $ gpg --recv-key C3C45C06 gpg:从 hkp 服务器 keys.gnupg.net 请求密钥 C3C45C06 gpg:密钥 C3C45C06:公钥“Jakub Jelinek jakub@redhat.com”已导入 gpg:未找到最终受信任的密钥 gpg:处理的总数:1 gpg:导入:1

如果命令错误超时,you may be behind a firewall that is blocking the default gpg port. Try using the `--keyserver' option with port 80(几乎所有防火墙都允许端口 80 b/c 进行网页浏览):

$ gpg --keyserver hkp://$HOSTNAME:80 --recv-keys $KEY_ID

    验证签名:

    $ gpg gcc-4.7.2.tar.gz.sig gpg: Signature made Čt 20. září 2012, 12:30:44 CEST using DSA key ID C3C45C06 gpg:来自“Jakub Jelinek jakub@redhat.com”的良好签名 [未知] gpg:警告:此密钥未经可信签名认证! gpg:没有迹象表明签名属于所有者。 主键指纹:33C2 35A3 4C46 AA3F FB29 3709 A328 C3A2 C3C4 5C06

输出应该是“良好的签名”。


gpg:警告:此密钥未经过可信签名认证!

是另一个问题;)

【讨论】:

很好的分步说明! 如果需要验证的文件是 gnupg(不在问题中),可以在 gnupg 站点上使用 SHA-1 校验和来验证第一次 gnupg 下载的文件。 在签名验证过程中,gpg 将 tarball 文件及其对应的 .sig 文件作为一个单元进行处理。如果 tarball 丢失或重命名,gpg 提供了指定 tarball 名称的机会。 我得到了一个 RSA 密钥,如果没有该列表中的 --keyserver 或与该列表中的 --keyserver 一起使用,它就无法工作,只有一个得到它,但它似乎不受信任,这很奇怪,因为我正在尝试它GNU coreutils 是一个广泛使用的包。 另外,如果 gpg 警告“未提供命令,猜测您的意思”,请改用 gpg --verify gcc-4.7.2.tar.gz.sig【参考方案2】:

这种其他途径对于验证 GNU 项目(例如 Octave)特别有用,因为在任何密钥服务器中都可能找不到他们签名请求的密钥。

来自http://ftp.gnu.org/README

还有 .sig 文件,其中包含分离的 GPG 签名 上述文件,由相同的脚本自动签名 生成它们。

您可以使用密钥环验证 gnu 项目文件的签名 文件来自:

https://ftp.gnu.org/gnu/gnu-keyring.gpg

在带有密钥环文件的目录中,要验证的源文件和 签名文件,使用的命令是:

$ gpg --verify --keyring ./gnu-keyring.gpg foo.tar.xz.sig

【讨论】:

但是如果我们在谈论安全性那么最好使用 HTTPS 连接:https://ftp.gnu.org/gnu/gnu-keyring.gpg 有趣的是,我在这里明确说明如何验证 Octave! :) 谢谢。我在任何密钥服务器中都找不到 Bash 维护者的密钥,但这是我验证其源代码签名所需要的。 对于八度,请在此处查看有关 gpg4win 应用程序的答案:superuser.com/questions/1268544/…【参考方案3】:

您必须在公共密钥服务器中搜索给定的密钥 ID:在您的情况下为 ID C3C45C06 将找到的密钥导入您的本地密钥库,然后验证应该没问题。 我使用的是 Ubuntu 12.04,它带有 Seahorse 密钥管理软件。在导入密钥之前,我看到了这个:

~/Downloads$ gpg --verify --keyring ./gnu-keyring.gpg icecat-31.5.0.en-US.linux-x86_64.tar.bz2.sig icecat-31.5.0.en-US.linux-x86_64.tar.bz2
gpg: Signature made  9.03.2015 (пн) 22,35,52 EET using RSA key ID D7E04784
gpg: Can't check signature: public key not found

导入密钥后,我看到了这个:

~/Downloads$ gpg --verify --keyring ./gnu-keyring.gpg icecat-31.5.0.en-US.linux-x86_64.tar.bz2.sig icecat-31.5.0.en-US.linux-x86_64.tar.bz2
gpg: Signature made  9.03.2015 (пн) 22,35,52 EET using RSA key ID D7E04784
gpg: Good signature from "Ruben Rodriguez (GNU IceCat releases key) <ruben@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: A573 69A8 BABC 2542 B5A0  368C 3C76 EED7 D7E0 4784

【讨论】:

在superuser.com/questions/1616531/…提出了有关此警告的问题【参考方案4】:

根据这个http://gcc.gnu.org/mirrors.html 应该是Jakub Jelinek 并且有效。不过我不知道你会从哪里得到他的公钥。

【讨论】:

以上是关于如何使用 .sig 文件验证下载的文件?的主要内容,如果未能解决你的问题,请参考以下文章

LINUX使用sig文件验证文件的签名

使用 QNetworkAccessManager 通过 HTTPS 下载文件:如何进行身份验证?

如何在 AFNetworking 2 中使用 POST + 参数下载经过身份验证的文件?

下载文件时如何传递身份验证令牌?

如何使用 R 登录然后从 aspx 网页下载文件

赛普拉斯 - 如何验证文件是不是已下载?