Docker 内容信任(Docker Content Trust,简称 DCT)是一个安全特性,用于确保 Docker 镜像的完整性和来源可信度。它基于数字签名和密钥管理的概念,为 Docker 镜像提供了一个安全的认证机制。DCT 使用了 Notary 项目作为底层技术,Notary 是一个开源的软件签名和验证服务。

Docker 内容信任的作用:
  1. 完整性验证
    当你从 Docker Hub 或其他 Docker registry 下载镜像时,DCT 允许你验证镜像是否在传输过程中被篡改。每个镜像标签都由其所有者签名,因此你可以确信你正在使用的镜像是原始的且未经修改的。
  2. 来源验证
    DCT 也确保镜像的来源是可信的。当你下载一个带有签名的镜像时,Docker 客户端会验证签名以确认镜像是由预期的发布者创建的。
  3. 自动化签名
    在企业环境中,DCT 可以配置为自动签名镜像,这样 CI/CD 流水线可以在构建镜像后立即进行签名,确保镜像在进入生产环境之前已经被验证。
  4. 密钥管理
    DCT 包含一套密钥管理系统,用于生成、存储和管理用于签名和验证镜像的密钥。这包括 root 密钥、delegation 密钥和 signing 密钥,分别用于不同的目的和层次。
如何启用 Docker 内容信任:

Docker 内容信任默认是禁用的,启用它需要设置环境变量 DOCKER_CONTENT_TRUST=1。在某些情况下,你可能需要使用 DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE 来提供根密钥的密码短语。

使用 Docker 内容信任:
  1. 生成密钥
    在使用 DCT 之前,你需要生成密钥对。这可以通过 trust key generate 命令完成。
  2. 签名镜像
    创建或修改镜像后,你可以使用 docker trust sign 命令对镜像进行签名。
  3. 推送镜像
    将已签名的镜像推送到 Docker registry。当镜像被推送到 registry 时,相关的签名也会被存储。
  4. 验证镜像
    在下载镜像后,可以使用 docker trust inspectdocker pull --trust-report 来验证镜像的签名。

通过使用 Docker 内容信任,组织可以增加其 Docker 镜像供应链的安全性,防止恶意或未经授权的修改,确保镜像在从开发到生产的整个生命周期中都是安全的。