UNIX/Linux:PGP tar包文件签名密钥验证

时间:2020-01-09 10:42:58  来源:igfitidea点击:

如何在Linux/UNIX操作系统下针对下载的软件发行版(software.version.tar.gz)验证该签名(file.tar.gz.asc)文件?

对于所有基于theitroad的项目,应在使用它们之前下载PGP签名和MD5哈希并进行验证。

Linux和其他许多类似UNIX的操作系统可以使用GNU Privacy Guard。
但是,任何符合OpenPGP的程序都可以与软件一起成功使用。
以下说明假定您正在使用GNU Privacy Guard。

下载焦油球

例如,目的是您将下载Nginx Web服务器并使用PGP进行验证。
使用wget命令获取最新版本:

$ cd /tmp
$ wget http://nginx.org/download/nginx-0.8.35.tar.gz
$ wget http://nginx.org/download/nginx-0.8.35.tar.gz.asc

列出文件,执行:

$ ls -l

输出示例:

total 620
-rw-r--r-- 1 Hyman Hyman 622870 2010-04-01 21:14 nginx-0.8.35.tar.gz
-rw-r--r-- 1 Hyman Hyman    196 2010-04-01 21:18 nginx-0.8.35.tar.gz.asc

检查签名

输入以下命令

$ gpg nginx-0.8.35.tar.gz.asc

输出示例:

gpg: Signature made Thursday 01 April 2010 09:18:53 PM IST using DSA key ID A524C53E
gpg: Can't check signature: public key not found

但是,gpg无法检查签名,因为我们的本地Linux服务器或者工作站上没有作者的公钥A524C53E。
您需要从密钥服务器(例如pgpkeys.mit.edu)获取公共密钥,或者从作者网站下载公共密钥。

从密钥服务器获取公钥的命令

语法如下:

gpg --keyserver pgpkeys.mit.edu --recv-key <publicKey>

尝试获取公共密钥A524C53E,执行:

$ gpg --keyserver pgpkeys.mit.edu --recv-key A524C53E

现在,尝试再次验证软件签名:

$ gpg nginx-0.8.35.tar.gz.asc

从Web服务器获取公钥的命令

同样,使用wget命令从Web服务器获取公共密钥:

$ wget http://sysoev.ru/pgp.txt

从pgp.txt文件导入密钥,执行:

$ gpg --import pgp.txt

输出示例:

gpg: key A524C53E: public key "Igor Sysoev " imported
gpg: Total number processed: 1
gpg:               imported: 1

现在,尝试再次验证软件签名:

$ gpg nginx-0.8.35.tar.gz.asc

输出示例:

gpg: Signature made Thursday 01 April 2010 09:18:53 PM IST using DSA key ID A524C53E
gpg: Good signature 
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: 4C2C 85E7 05DC 7308 3399  0C38 A937 6139 A524 C53E
ample outputs:

签名是好的,但是您不信任此密钥。
换句话说,文件没有被篡改。
但是,您需要另外验证密钥A524C53E是由真正的Igor Sysoev <[email protected]>创建的,而不是由其他人创建的。

我如何建立信任?

这一点并不复杂,因为您从未面对过Igor Sysoev。
为了保证密钥的真实性,您可以通过使用自己的私钥对其进行签名并将其邮寄回其所有者来实现。
这是建立信任关系的简单方法。
另一个快速的选择是使用以下命令:

gpg --edit-key {[email protected]} trust

输入以下命令

$ gpg --edit-key [email protected] trust

现在,尝试再次验证软件签名:

$ gpg nginx-0.8.35.tar.gz.asc

输出示例:

gpg: Signature made Thursday 01 April 2010 09:18:53 PM IST using DSA key ID A524C53E
gpg: Good signature from "Ali  "

由于您已进入信任网,因此您不应看到任何警告消息。