8.7. 使用私钥和 Rekor ,用 sigstore 签名签名容器镜像


从 Podman 版本 4.4 开始,您可以将容器签名的 sigstore 格式与 Rekor 服务器一起使用。您还可以将公共签名上传到公共 rekor.sigstore.dev 服务器,这会增加与 Cosign 的互操作性。然后,您可以使用 cosign verify 命令验证您的签名,而无需明确禁用 Rekor。

先决条件

  • container-tools 模块已安装。

流程

  1. 生成 sigstore 公钥/私钥对:

    $ skopeo generate-sigstore-key --output-prefix myKey
    Copy to Clipboard Toggle word wrap
    • 生成公钥和私钥 myKey.pubmyKey.private
  2. /etc/containers/registries.conf.d/default.yaml 文件中添加以下内容:

    docker:
        <registry>:
            use-sigstore-attachments: true
    Copy to Clipboard Toggle word wrap
    • 通过设置 use-sigstore-attachments 选项,Podman 和 Skopeo 可以将容器 sigstore 签名与镜像一起读写,并将它们保存在与签名镜像相同的存储库中。

      注意

      您可以编辑 /etc/containers/registries.d 目录中任何 YAML 文件中的 registry 或 repository 配置部分。单个范围 (default-docker、注册中心或命名空间) 只能存在于 /etc/containers/registries.d 目录中的一个文件中。您还可以在 /etc/containers/registries.d/default.yaml 文件中编辑系统范围的 registry 配置。请注意,所有 YAML 文件都是可读的,文件名是任意的。

  3. 使用 Containerfile 在当前目录中构建容器镜像:

    $ podman build -t <registry>/<namespace>/<image>
    Copy to Clipboard Toggle word wrap
  4. 创建 file.yml 文件:

    privateKeyFile: "/home/user/sigstore/myKey.private"
    privateKeyPassphraseFile: "/mnt/user/sigstore-myKey-passphrase"
    rekorURL: "https://<your-rekor-server>"
    Copy to Clipboard Toggle word wrap
    • file.yml 是 sigstore 签名参数 YAML 文件,其用于存储创建 sigstore 签名所需的选项。
  5. 为镜像签名并将其推送到注册中心:

    $ podman push --sign-by-sigstore=file.yml <registry>/<namespace>/<image>
    Copy to Clipboard Toggle word wrap
    • 您还可以使用带有类似 --sign-by-sigstore 选项的 skopeo copy 命令来为现有镜像签名,同时将它们在多个容器注册中心之间移动。
警告

请注意,您对公共服务器的提交包括有关公钥的数据和有关签名的元数据。

验证

  • 使用以下方法之一验证容器镜像是否被正确签名:

    • 使用 cosign verify 命令:

      $ cosign verify <registry>/<namespace>/<image> --key myKey.pub
      Copy to Clipboard Toggle word wrap
  • 使用 podman pull 命令:

    • /etc/containers/policy.json 文件中添加 rekorPublicKeyPathrekorPublicKeyData 字段:

      {
        ...
        "transports": {
      	"docker": {
              "<registry>/<namespace>": [
                  {
                      "type": "sigstoreSigned",
                      "rekorPublicKeyPath": "/path/to/local/public/key/file",
                  }
              ]
      	...
      	}
        }
        ...
      }
      Copy to Clipboard Toggle word wrap
    • 拉取镜像:

      $ podman pull <registry>/<namespace>/<image>
      Copy to Clipboard Toggle word wrap
      • podman pull 命令会强制签名存在,而无需额外的选项。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat