代码签名

什么是代码签名?

代码签名是将加密签名应用于软件工件(例如 Docker 镜像)以验证其完整性和真实性的过程。通过签署镜像,您可以确保自签署以来它未被更改,并且它源自可信来源。

在 Docker 强化镜像 (DHI) 的上下文中,代码签名是使用 Cosign 实现的,Cosign 是 Sigstore 项目开发的一个工具。Cosign 能够安全且可验证地签署容器镜像,从而增强软件供应链中的信任和安全性。

为什么代码签名很重要?

代码签名在现代软件开发和网络安全中起着至关重要的作用

  • 真实性:验证镜像是否由可信来源创建。
  • 完整性:确保自签署以来镜像未被篡改。
  • 合规性:帮助满足法规和组织安全要求。

Docker 强化镜像代码签名

每个 DHI 都使用 Cosign 进行加密签名,确保镜像未被篡改并源自可信来源。

为什么要签署自己的镜像?

Docker 强化镜像由 Docker 签名以证明其来源和完整性,但如果您正在构建扩展或使用 DHI 作为基础的应用程序镜像,您也应该签署自己的镜像。

通过签署自己的镜像,您可以

  • 证明镜像由您的团队或管道构建
  • 确保您的构建在推送后未被篡改
  • 支持 SLSA 等软件供应链框架
  • 在部署工作流中启用镜像验证

这在您频繁构建和推送镜像的 CI/CD 环境中尤为重要,或在任何需要审计镜像来源的场景中。

如何查看和使用代码签名

查看签名

您可以使用 Docker Scout 或 Cosign 验证 Docker 强化镜像是否已签名且受信任。

要列出附加到镜像的所有证明(包括签名元数据),请使用以下命令

$ docker scout attest list <image-name>:<tag> --platform <platform>

要验证特定的已签名证明(例如 SBOM、VEX、来源)

$ docker scout attest get \
  --predicate-type <predicate-uri> \
  --verify \
  <image-name>:<tag> --platform <platform>

例如:

$ docker scout attest get \
  --predicate-type https://openvex.dev/ns/v0.2.0 \
  --verify \
  docs/dhi-python:3.13 --platform linux/amd64

如果有效,Docker Scout 将确认签名并显示签名有效负载,以及验证镜像的等效 Cosign 命令。

签署镜像

要签署 Docker 镜像,请使用 Cosign。将 <image-name>:<tag> 替换为镜像名称和标签。

$ cosign sign <image-name>:<tag>

此命令将提示您通过 OIDC 提供商(如 GitHub、Google 或 Microsoft)进行身份验证。成功进行身份验证后,Cosign 将生成一个短期证书并签署镜像。签名将存储在透明日志中,并与注册表中的镜像相关联。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.