下载许多开源文件时候会遇到许多.sig文件,其实这是一个签名文件,能够验证数据的完整性。
如下是下载glibc的文件并利用.sig签名文件验证数据完整性
使用gpg命令验证数据完整性
$:gpg --verify glibc-2.25.tar.gz.sig glibc-2.25.tar.gz
输出信息:
gpg: 钥匙环‘/home/summer/.gnupg/pubring.gpg’已建立
gpg: 于 2017年02月06日 星期一 00时12分49秒 CST 创建的签名,使用 RSA,钥匙号 F1CF2187
gpg: 无法检查签名:找不到公钥
根据信息,试着导入公钥
$:gpg --recv-keys F1CF2187
输出信息:
gpg: 钥匙环‘/home/summer/.gnupg/secring.gpg’已建立
gpg: 未给出公钥服务器(使用 --keyserver 选项)
gpg: 从公钥服务器接收失败:URI 已损坏
由于没有公钥服务器尔找不到公钥,给定公钥服务器
$:glibc$ gpg --recv-keys --keyserver keys.gnupg.net F1CF2187
输出信息:
gpg: 下载密钥‘F1CF2187’,从 hkp 服务器 keys.gnupg.net
gpg: /home/summer/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 F1CF2187:公钥“Siddhesh Poyarekar <siddhesh@gotplt.org>”已导入
gpg: 没有找到任何绝对信任的密钥
gpg: 合计被处理的数量:1
gpg: 已导入:1 (RSA: 1)
验证数据的完整性
$:glibc$ gpg --verify --verbose glibc-2.25.tar.gz.sig glibc-2.25.tar.gz
输出信息:
gpg: 于 2017年02月06日 星期一 00时12分49秒 CST 创建的签名,使用 RSA,钥匙号 F1CF2187
gpg: 使用 PGP 信任模型
gpg: 完好的签名,来自于“Siddhesh Poyarekar <siddhesh@gotplt.org>”
gpg: 亦即“Siddhesh Poyarekar <siddhesh@redhat.com>”
gpg: 亦即“Siddhesh Poyarekar <spoyarek@redhat.com>”
gpg: 亦即“Siddhesh Poyarekar <sid@reserved-bit.com>”
gpg: 亦即“Siddhesh Poyarekar (Personal) <siddhesh.poyarekar@gmail.com>”
gpg: 亦即“Siddhesh Poyarekar (https://sourceware.org) <siddhesh@sourceware.org>”
gpg: 警告:这把密钥未经受信任的签名认证!
gpg: 没有证据表明这个签名属于它所声称的持有者。
主钥指纹: BC7C 7372 637E C10C 57D7 AA65 79C4 3DFB F1CF 2187
gpg: 二进制 签名,散列算法 SHA1
至此完毕,数据是完整的,可以放心解压。其次有的时候并不需要导入公钥服务器的过程就能够恢复公钥,有的时候需要导入公钥服务器,但是可能不知道服务器是什么。这种情况下,如果你是从gnu的官网下载的开源文件,可以试试服务器 keys.gnupg.net ,至于其他的就要善用搜索了。