引子
由于当前一些比较知名的开源网站如GNU、Apache支持的开源项目比较丰富,开源项目的使用客户也比较多,从而开源文件的下载量就比较大,这给开源网站带来了不小的压力。
为了满足世界范围内不同国家和地区的下载需求,知名开源网站一般都会在各个国家和地区建立一些镜像站点(mirror sites),比如在中国有许多大学提供这种镜像站点服务,还有网易也提供。
但是问题来了,我们可以从这些镜像站点更快的下载开源文件,但是如何保证这些开源文件
- 下载完整
- 没有被无意或恶意篡改过
我想快乐的从镜像站点下载开源文件的小伙伴们也许曾经想到过这些问题,献身开源事业的开源网站管理者同样也想到了这样的问题,所以他们不仅提供了开源文件,还提供了开源文件的验证文件filename.sig,filename.asc等等(filename.mds、filename.md5sum、filename.sha1不在本次讨论之列)
那如何使用这些文件验证开源文件的有效性呢?
使用步骤
为了保证filename.sig,filename.asc不被恶意篡改,建议使用https协议下载上述验证文件:
> wget -c https://example.com/download/filename.sig
从较快的镜像站点下载开源文件(http、https、ftp都可以):
> wget -c http://mirror.example.com/download/filename
这时如果直接使用gpg工具(源自GnuPG),则会获得如下结果:
> gpg --verify ./filename.sig ./filename gpg: Signature made Sun 22 Sep 2013 12:11:06 AM PDT using DSA key ID 2983D606 gpg: Cannot check signature: public key not found
这说明我们还没有相应的公钥。
这时有三种解决方法:
从知名keyserver下载相应公钥
> gpg --keyserver keyserver.org --recv-key 2983D606 gpg: requesting key 2983D606 from hkp server keyserver.org gpg: key 2983D606: public key "Gary Vaughan (Free Software Developer) <gary@vaughan.pe>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1
阅读example.com/README下载公钥KEYS文件
> wget -c https://example.com/download/KEYS > gpg --import ./KEYS
阅读example.com/README下载keyring文件
> wget -c https://example.com/download/keyring.gpg > gpg --import ./keyring.gpg
这时可以验证
> gpg --verify ./filename.sig ./filename gpg: Signature made Sun 22 Sep 2013 12:11:06 AM PDT using DSA key ID 2983D606 gpg: Good signature from "Gary Vaughan (Free Software Developer) <gary@vaughan.pe>" gpg: aka "Gary V. Vaughan <gary@gnu.org>" gpg: aka "[jpeg image of size 9845]" 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: CFE2 BE70 7B53 8E8B 2675 7D84 1513 0809 2983 D606
或
> gpg --verify --keyring ./keyring.gpg ./filename.sig ./filename
Keyserver 示例
- subkeys.pgp.net
- pgp.mit.edu
- keyservre.ubuntu.com