apt-key add 有什么用?

apt-key add 有什么用?

我注意到,当从 安装软件包时apt,有时我们会执行以下操作:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \

如果我理解正确的话,我们在这里做的是从 中获取 GPG 公钥https://download.../gpg,并将其放入 中/usr/share/keyrings/docker-archive-keyring.gpg。然后,我们告诉 apt - “当您从 下载软件包时,请https://download.docker.com/...验证这些软件包是否由属于此公钥的私钥签名”。

所以我不太明白:如果我们相信它是另一端的 Docker https://download.docker.com/.. - 而且我们确实相信,因为这是我们获取公钥的地方 - 那么为什么我们需要使用 gpg 密钥来验证来自那里的包?

对我来说这听起来像是自签名证书。

我这里遗漏了什么吗?

答案1

这有多种原因,都围绕着中间人攻击(MITM)——具体来说,保护你免受未来任何 MITM 攻击或其他类型的恶意重定向到“虚假下载源”的情况您已经获得了好钥匙。


如果你处于最糟糕的情况——你的系统已经被入侵,并被重定向到恶意行为者(简称“MA”)的恶意网站——那么你就被坑了,而且这并不能保护你,因为你将下载 MA 的密钥。这不是这里保护 PGP 密钥和密钥环的目的,而是为了保护你免受未来MITM 攻击。

在这个例子中,你已经受到攻击,使用什么密钥并不重要,因为 MA 此时可能已经控制了你的计算机、网络、数据等。然而,最常见的保护方案是开始拥有干净的环境/系统和然后安装来自合法来源的软件。(见下一部分)


但是,从受感染的环境开始并不是密钥签名所防范的“常见情况”。最常见的情况是:您处于干净的系统上,有干净的更新,您的系统、您使用的 DNS 服务器、您连接的网络等均未受到感染。

你去安装 Docker 并从真正的 Docker 网站获取 Docker 密钥。然后安装 Docker,密钥就会生效。

在未来的某个时候,MA 已经控制了您的流量如何流向互联网,并将您重定向到“假” Docker 下载站点。

除非 MA 从 Docker 窃取了 PGP 密钥及其对应的私钥,否则你的apt系统将显示download.docker.com 不匹配并且您的环境中发生了一些奇怪的事情,并且不会应用 MA 的“坏”存储库重定向的更新。

密钥签名和密钥部分可以防止:你在未来。如果你已经受到攻击,它就无法保护你,什么都不能。当你开始干净、不受攻击时,它会保护你,然后变得由于某种原因而受到损害。

这也是为什么您应该根据已知的良好密钥指纹来验证密钥指纹的原因。大多数良好的存储库提供商都有自己的指纹可供手动验证,因此您不必仅依靠命令来获取和信任密钥。

相关内容