管理内容信任密钥
镜像标签的信任通过密钥进行管理。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 内容信任可以存储和使用 Yubikey 4 中的根密钥进行签名。Yubikey 的优先级高于文件系统中存储的密钥。当您使用内容信任初始化一个新仓库时,Docker Engine 会在本地查找根密钥。如果未找到密钥且存在 Yubikey 4,Docker Engine 就会在 Yubikey 4 中创建一个根密钥。更多详情,请参考 Notary 文档。
在 Docker Engine 1.11 之前,此功能仅存在于实验分支中。
密钥丢失
警告
如果发布者丢失了密钥,就意味着丢失了为相关仓库签名镜像的能力。如果您丢失了密钥,请发送电子邮件到 Docker Hub 支持。提醒一下,丢失根密钥是无法恢复的。
此丢失还要求每个在密钥丢失之前使用过该仓库已签名标签的使用者进行手动干预。
镜像使用者会收到以下错误,该错误针对之前从受影响的仓库(s)下载的内容。
Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold
要纠正此问题,他们需要下载使用新密钥签名的新的镜像标签。