我一直在阅读有关为什么apt-get
网络活动通常不部署加密的信息。并且了解到它会检查来自存储库的数据的签名,对吗?
但是现在,这种检查是如何进行的?如何才能真正保证安全?例如,如果文件和密钥在服务器中并以未加密的方式发送,这将如何工作?有人可以修改两者……
答案1
在 apt 存储库的根目录中有一个Release
文件,其中包含哈希各种Contents
、Release
和Packages
文件的哈希值。这些Packages
文件又包含各个.deb
包文件的哈希值。在与根文件相同的位置Release
,有一个Release.gpg
文件,其中包含通用石油气 电子签名的Release
文件,用私钥属于存储库维护者,使用公钥加密。
当apt-get
下载Release
文件到存储库时,它将自动尝试使用系统上的公钥文件验证数字签名。如果签名所用的密钥对中的公钥未在您的系统上注册,系统将提示您批准它;此时,您可以联系存储库维护者或第三方,通过比较指纹来验证公钥是否真实(或者,如果您有一份您已经知道是真实的公钥副本,您可以在运行之前将其添加进去apt-key
)apt-get
。之后,apt-get
从存储库下载的任何文件都将根据Release
或Packages
文件中的校验和进行检查。
Release
和文件中的哈希值Packages
是 apt 的正常数据完整性功能。添加 GPG 签名是德比安调用安全设施(请参阅该链接了解更多详情)。