管理密钥以实现内容信任

镜像标签的信任通过使用密钥进行管理。Docker 的内容 trust 使用五种不同类型的密钥:

钥匙描述
根键镜像标记的内容信任根。启用内容信任后,您需要创建一次根密钥。也称为脱机密钥,因为它应保持脱机状态。
目标此密钥允许您对镜像标签进行签名,以管理委托,包括委托密钥或允许的委托路径。也称为存储库密钥,因为此密钥确定哪些标签可以签名到镜像存储库中。
快照此密钥对当前镜像标记集合进行签名,防止混合和匹配攻击。
时间戳此密钥允许 Docker 镜像存储库获得新鲜度安全保证,而无需在客户端定期刷新内容。
代表团委派密钥是可选的标记密钥,允许您将签名镜像标记委派给其他发布者,而无需共享您的目标密钥。

首次启用内容信任 时, 根、目标、快照和时间戳键是自动生成的 镜像仓库:docker push

  • root 和 targets 键在本地客户端生成和存储。

  • 时间戳和快照密钥安全地生成并存储在签名服务器中 与 Docker 注册表一起部署。这些密钥是在后端生成的 不直接向 Internet 公开且静态加密的服务。使用 Notary CLI 在本地管理您的快照密钥

委托密钥是可选的,不会作为正常工作流程的一部分生成。它们需要手动生成并添加到存储库中docker

选择密码

您为根密钥和存储库密钥选择的密码应 随机生成并存储在密码管理器中。拥有存储库密钥 允许用户对存储库上的镜像标记进行签名。密码用于加密 您的密钥处于静止状态,并确保丢失的笔记本电脑或意外备份不会 使私钥材料处于风险之中。

备份您的密钥

所有 Docker 信任密钥都使用您提供的密码进行加密存储 在创建时。即便如此,您仍然应该注意备份它们的位置。 好的做法是创建两个加密的 USB 密钥。

警告

将密钥备份到安全可靠的位置非常重要。 存储库密钥的丢失是可恢复的,但根密钥的丢失是不可恢复的。

Docker 客户端将密钥存储在目录中。 在备份它们之前,您应该将它们备份到存档中:~/.docker/trust/privatetar

$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022

硬件存储和签名

Docker Content Trust 可以使用 Yubikey 4 中的 root 密钥进行存储和签名。这 Yubikey 的优先级高于存储在文件系统中的键。初始化 具有内容信任的新存储库,Docker Engine 在本地查找根密钥。如果 key 未找到且 Yubikey 4 存在,则 Docker Engine 会在 尤比基 4.有关更多详细信息,请参阅 Notary 文档

在 Docker Engine 1.11 之前,此功能仅在 experimental 分支中提供。

密钥丢失

警告

如果发布者丢失了密钥,则意味着失去了为 存储库中的镜像签名的能力 问题。如果您丢失了密钥,请向 Docker Hub Support 发送电子邮件。 提醒一下,根密钥的丢失是不可恢复的。

这种损失还需要每个使用签名 标记。
对于之前从受影响的存储库下载的内容,镜像使用者会收到以下错误:

Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold

要更正此问题,他们需要下载一个使用 新密钥。