全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

镜像签名与验证

Docker Content Trust (DCT) 确保镜像来源可信,防止篡改。

启用 DCT

Bash
# 启用内容信任
export DOCKER_CONTENT_TRUST=1

# 永久生效
echo 'export DOCKER_CONTENT_TRUST=1' >> ~/.bashrc

密钥管理

根密钥与仓库密钥

Bash
# 首次推送时自动生成
docker trust key generate my-key

# 输出
Generating key for my-key...
Enter passphrase for new my-key key: 
Enter again: 

# 密钥存储位置
~/.docker/trust/private/

密钥类型:

  • 根密钥 (root key):首次使用生成,保护仓库
  • 仓库密钥 (repository key):每个仓库独立

委派密钥

Bash
# 添加委派签名者
docker trust signer add --key cert.pem dev user/registry

# 委派签名权限,不暴露根密钥

签名镜像

Bash
# 推送并签名
docker push myregistry.com/my-app:v1.0

# 输出
Signing and pushing trust metadata
Enter passphrase for new my-app key: 
Enter passphrase for new my-app key (again): 

验证签名

Bash
# 拉取已签名镜像(DCT 启用时)
docker pull myregistry.com/my-app:v1.0

# 输出
Pull (1 of 1): myregistry.com/my-app:v1.0@sha256:abc123...
Pull complete

# 验证失败会拒绝拉取

查看签名

Bash
# 查看镜像签名状态
docker trust inspect myregistry.com/my-app:v1.0

# 输出
[
    {
        "Name": "myregistry.com/my-app:v1.0",
        "SignedTags": [
            {
                "SignedTag": "v1.0",
                "Digest": "sha256:abc123..."
            }
        ]
    }
]

签名工作流

Bash
1. 构建镜像
   docker build -t my-app:v1.0 .

2. 推送并签名
   docker push my-app:v1.0
   (输入密钥)

3. 用户拉取验证
   docker pull my-app:v1.0
   (自动验证签名)

撤销签名

Bash
# 撤销标签
docker trust revoke myregistry.com/my-app:v1.0

# 撤销后拉取会失败(DCT 启用时)

Notary 服务器

text
# 配置 Notary 服务器
export DOCKER_CONTENT_TRUST_SERVER=https://notary.example.com

# 签名数据存储在 Notary 服务器
# 客户端验证时从 Notary 获取签名

最佳实践

  • 生产环境启用 DOCKER_CONTENT_TRUST=1
  • 根密钥离线存储,不要上传到服务器
  • 使用委派密钥分工签名
  • CI/CD 流水线中集成签名步骤
  • 定期轮换密钥

要点总结

  • Docker Content Trust 使用 Notary 实现镜像签名
  • 启用 DOCKER_CONTENT_TRUST=1 强制验证
  • 推送时签名,拉取时验证,防止中间人攻击
  • 根密钥保护仓库安全,委派密钥分工签名
  • 生产环境必须启用,CI/CD 流水线集成签名

📝 发现内容有误?点击此处直接编辑

← 上一篇 镜像加速与缓存
下一篇 → AppArmor/Seccomp 配置
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库