管理内容信任密钥
对图像标签的信任是通过使用密钥来管理的。 Docker 的内容信任使用五种不同类型的密钥:
钥匙 | 描述 |
---|---|
根密钥 | 图像标签的内容信任根。启用内容信任后,您只需创建一次根密钥。也称为离线密钥,因为它应该保持离线状态。 |
目标 | 此密钥允许您签署图像标签,以管理委派,包括委派密钥或允许的委派路径。也称为存储库密钥,因为此密钥决定哪些标签可以签名到图像存储库中。 |
快照 | 该密钥对当前图像标签集合进行签名,防止混合匹配攻击。 |
时间戳 | 该密钥允许 Docker 镜像存储库拥有新鲜度安全保证,而无需在客户端定期刷新内容。 |
代表团 | 委托密钥是可选的标记密钥,允许您将签名图像标签委托给其他发布者,而无需共享您的目标密钥。 |
docker push
首次启用内容信任时,会自动为映像存储库生成根、目标、快照和时间戳密钥:
根密钥和目标密钥在客户端本地生成并存储。
时间戳和快照密钥被安全地生成并存储在与 Docker 注册表一起部署的签名服务器中。这些密钥是在不直接暴露于互联网的后端服务中生成的,并且在静态时进行加密。使用 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 中的根密钥进行存储和签名。Yubikey 的优先级高于文件系统中存储的密钥。当您使用内容信任初始化新存储库时,Docker 引擎会在本地查找根密钥。如果未找到密钥且 Yubikey 4 存在,则 Docker 引擎会在 Yubikey 4 中创建根密钥。 有关更多详细信息,请参阅Notary 文档。
在 Docker Engine 1.11 之前,此功能仅存在于实验分支中。
钥匙丢失
警告
如果发布者丢失密钥,则意味着失go为相关存储库签署图像的能力。如果您丢失了密钥,请发送电子邮件至 Docker Hub 支持。提醒一下,根密钥丢失是无法恢复的。
这种丢失还需要在丢失之前使用此存储库中的签名标签的每个消费者进行手动干预。
对于之前从受影响的存储库下载的内容,图像使用者会收到以下错误:
Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold
为了纠正这个问题,他们需要下载使用新密钥签名的新图像标签。