管理密钥以实现内容信任
镜像标签的信任通过使用密钥进行管理。Docker 的内容 trust 使用五种不同类型的密钥:
钥匙 | 描述 |
---|---|
根键 | 镜像标记的内容信任根。启用内容信任后,您需要创建一次根密钥。也称为脱机密钥,因为它应保持脱机状态。 |
目标 | 此密钥允许您对镜像标签进行签名,以管理委托,包括委托密钥或允许的委托路径。也称为存储库密钥,因为此密钥确定哪些标签可以签名到镜像存储库中。 |
快照 | 此密钥对当前镜像标记集合进行签名,防止混合和匹配攻击。 |
时间戳 | 此密钥允许 Docker 镜像存储库获得新鲜度安全保证,而无需在客户端定期刷新内容。 |
代表团 | 委派密钥是可选的标记密钥,允许您将签名镜像标记委派给其他发布者,而无需共享您的目标密钥。 |
首次启用内容信任 时,
根、目标、快照和时间戳键是自动生成的
镜像仓库:docker push
root 和 targets 键在本地客户端生成和存储。
时间戳和快照密钥安全地生成并存储在签名服务器中 与 Docker 注册表一起部署。这些密钥是在后端生成的 不直接向 Internet 公开且静态加密的服务。使用 Notary CLI 在本地管理您的快照密钥。
委托密钥是可选的,不会作为正常工作流程的一部分生成。它们需要手动生成并添加到存储库中。docker
选择密码
您为根密钥和存储库密钥选择的密码应 随机生成并存储在密码管理器中。拥有存储库密钥 允许用户对存储库上的镜像标记进行签名。密码用于加密 您的密钥处于静止状态,并确保丢失的笔记本电脑或意外备份不会 使私钥材料处于风险之中。
备份您的密钥
所有 Docker 信任密钥都使用您提供的密码进行加密存储 在创建时。即便如此,您仍然应该注意备份它们的位置。 好的做法是创建两个加密的 USB 密钥。
警告
将密钥备份到安全可靠的位置非常重要。 存储库密钥的丢失是可恢复的,但根密钥的丢失是不可恢复的。
Docker 客户端将密钥存储在目录中。
在备份它们之前,您应该将它们备份到存档中:~/.docker/trust/private
tar
$ 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
要更正此问题,他们需要下载一个使用 新密钥。