管理内容信任密钥

预计阅读时间:4分钟

通过使用密钥来管理对图像标签的信任。Docker的内容信任使用五种不同类型的密钥:

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

当执行docker push启用内容信托首次,根,目标,快照,和时间戳键的图像库自动生成:

  • 根密钥和目标密钥是在客户端本地生成和存储的。

  • 时间戳和快照密钥是安全生成的,并存储在与Docker注册表一起部署的签名服务器中。这些密钥是在后端服务中生成的,该服务不会直接暴露给Internet,而是在静止状态下进行加密。

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

注意:在Docker Engine 1.11之前,快照密钥也已生成并存储在本地客户端。使用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 Engine会在本地查找根密钥。如果未找到密钥,并且存在Yubikey 4,则Docker Engine在Yubikey 4中创建根密钥。有关 更多详细信息,请参阅公证人文档

在Docker Engine 1.11之前,此功能仅在实验分支中。

遗失钥匙

如果发布者丢失了密钥,则意味着失去了为您的存储库签署受信任内容的能力。如果您丢失了密钥,请发送电子邮件至Docker Hub支持以重置存储库状态。

这种丢失还需要来自每个在丢失之前拉出带标签图像的消费者的手动干预。图片使用者会因为他们已经下载的内容而收到错误消息:

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

要解决此问题,他们需要下载使用新密钥签名的新图像标签。

信任安全密钥知识库