2.2. 验证 Trusted Artifact Signer 安装


作为系统管理员,您可以验证 Red Hat Trusted Artifact Signer (RHTAS)是否部署在 Red Hat Enterprise Linux 上。

您可以签署测试容器镜像,并验证该签名的真实性,以验证您环境中的 RHTAS 部署。

可以通过两种方式从代码管道验证构建工件。您可以使用 cosigngitsign 签署和验证,但只能使用企业合同进行验证。

2.2.1. 使用命令行界面使用 Cosign 签名和验证容器

通过 cosign 工具,您可以使用红帽的Trusted Artifact Signer (RHTAS)服务签名和验证开放容器项目(OCI)容器镜像以及其他构建工件。

重要

对于 RHTAS,您必须使用 cosign 版本 2.2 或更高版本。

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 podman 二进制文件的工作站。

流程

  1. 从本地命令行界面(CLI)工具下载 cosign 二进制文件到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 cosign 下载部分,然后点击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip cosign-amd64.gz
      chmod +x cosign-amd64
      Copy to clipboard

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv cosign-amd64 /usr/local/bin/cosign
      Copy to clipboard

  2. 配置 shell 环境,以执行容器镜像签名和验证。

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to clipboard

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

  3. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to clipboard

  4. 为测试容器镜像签名。

    1. 创建一个空容器镜像:

      Example

      echo "FROM scratch" > ./tmp.Dockerfile
      podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
      Copy to clipboard

    2. 将空容器镜像推送到 ttl.sh 临时 registry:

      Example

      podman push ttl.sh/rhtas/test-image:1h
      Copy to clipboard

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to clipboard

      Example

      cosign sign -y ttl.sh/rhtas/test-image:1h
      Copy to clipboard

      此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to clipboard

  5. 使用证书身份和签发者验证签名的容器镜像:

    语法

    cosign verify --certificate-identity=SIGNING_EMAIL_ADDR IMAGE_NAME:TAG
    Copy to clipboard

    Example

    cosign verify --certificate-identity=jdoe@redhat.com ttl.sh/rhtas/test-image:1h
    Copy to clipboard

    注意

    您还可以使用 cosign 命令 --certificate-identity-regexp--certificate-oidc-issuer-regexp 的以下选项对证书身份和签发者使用正则表达式。

  6. 从本地命令行界面(CLI)工具下载 rekor-cli 二进制文件,将页面下载到您的工作站。

    1. 打开 Web 浏览器,再前往 CLI 服务器网页。

      注意

      URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例为 https://cli-server.example.com,因为 tas_single_node_base_hostname 的值为 example.com

    2. 在下载页面中,进入 rekor-cli 下载部分,然后点击您的平台的链接。
    3. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip rekor-cli-amd64.gz
      chmod +x rekor-cli-amd64
      Copy to clipboard

    4. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv rekor-cli-amd64 /usr/local/bin/rekor-cli
      Copy to clipboard

  7. 使用 Rekor 命令行界面查询透明日志。

    1. 根据日志索引进行搜索:

      Example

      rekor-cli get --log-index 0 --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to clipboard

    2. 搜索电子邮件地址以获取通用唯一标识符(UUID):

      语法

      rekor-cli search --email SIGNING_EMAIL_ADDR --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to clipboard

      Example

      rekor-cli search --email jdoe@redhat.com --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to clipboard

      此命令返回用于下一步的 UUID。

    3. 使用 UUID 获取事务详情:

      语法

      rekor-cli get --uuid UUID --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to clipboard

      Example

      rekor-cli get --uuid 24296fb24b8ad77a71b9c1374e207537bafdd75b4f591dcee10f3f697f150d7cc5d0b725eea641e7 --rekor_server $COSIGN_REKOR_URL --format json | jq
      Copy to clipboard

2.2.2. 使用命令行界面使用 Gitsign 签名和验证提交

gitsign 工具可让您使用红帽的 Trusted Artifact Signer (RHTAS)服务签名和验证 Git 存储库提交。

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 gitcosign 二进制文件的工作站。

    • 您必须使用 cosign 版本 2.2 或更高版本。

流程

  1. gitsign 二进制文件从本地命令行界面(CLI)工具下载页面到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 gitsign 下载部分,然后单击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩 .gz 文件,并设置执行位:

      Example

      gunzip gitsign-amd64.gz
      chmod +x gitsign-amd64
      Copy to clipboard

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv gitsign-amd64 /usr/local/bin/gitsign
      Copy to clipboard

  2. 配置您的 shell 环境,以进行提交签名和验证。

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to clipboard

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

  3. 使用 RHTAS 服务配置本地存储库配置以签署您的提交:

    Example

    git config --local commit.gpgsign true
    git config --local tag.gpgsign true
    git config --local gpg.x509.program gitsign
    git config --local gpg.format x509
    git config --local gitsign.fulcio $SIGSTORE_FULCIO_URL
    git config --local gitsign.rekor $SIGSTORE_REKOR_URL
    git config --local gitsign.issuer $SIGSTORE_OIDC_ISSUER
    git config --local gitsign.clientID trusted-artifact-signer
    Copy to clipboard

  4. 将提交提交到本地存储库:

    Example

    git commit --allow-empty -S -m “Test of a signed commit”
    Copy to clipboard

    此时会打开一个 Web 浏览器,允许您使用电子邮件地址为提交签名。

  5. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to clipboard

  6. 验证提交:

    语法

    gitsign verify --certificate-identity=SIGNING_EMAIL --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
    Copy to clipboard

    Example

    gitsign verify --certificate-identity=jdoe@redhat.com --certificate-oidc-issuer=$SIGSTORE_OIDC_ISSUER HEAD
    Copy to clipboard

2.2.3. 使用企业合同验证容器镜像上的签名

企业合同(EC)是维护软件供应链安全性的工具,您可以使用它来定义和执行容器镜像的策略。您可以使用 ec 二进制文件来验证使用红帽的 Trusted Artifact Signer (RHTAS)签名框架的容器镜像的待测试和签名。

先决条件

  • 在 Red Hat Enterprise Linux 9.4 或更高版本上运行的 RHTAS 安装由 Ansible 管理。
  • 安装了 cosignpodman 二进制文件的工作站。

    • 您必须使用 cosign 版本 2.2 或更高版本。

流程

  1. 从本地命令行界面(CLI)工具下载 ec 二进制文件到您的工作站。

    注意

    URL 地址是由 tas_single_node_base_hostname 变量定义的配置的节点。一个 URL 地址示例应为 https://cli-server.example.com,它赋予 tas_single_node_base_hostname 值,如 example.com

    1. 在下载页面中,进入 ec 下载部分,再单击平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置执行位:

      Example

      gunzip ec-amd64.gz
      chmod +x ec-amd64
      Copy to clipboard

    3. 将二进制文件移到 $PATH 环境中的位置:

      Example

      sudo mv ec-amd64 /usr/local/bin/ec
      Copy to clipboard

  2. 配置 shell 环境,以执行容器镜像签名和验证。

    Example

    export BASE_HOSTNAME=BASE_HOSTNAME_OF_RHTAS_SERVICE
    export TUF_URL="https://tuf.${BASE_HOSTNAME}"
    export OIDC_ISSUER_URL=OIDC_ISSUER_URL
    export COSIGN_FULCIO_URL="https://fulcio.${BASE_HOSTNAME}"
    export COSIGN_REKOR_URL="https://rekor.${BASE_HOSTNAME}"
    export COSIGN_MIRROR=$TUF_URL
    export COSIGN_ROOT=$TUF_URL/root.json
    export COSIGN_OIDC_CLIENT_ID="trusted-artifact-signer"
    export COSIGN_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_CERTIFICATE_OIDC_ISSUER=$OIDC_ISSUER_URL
    export COSIGN_YES="true"
    export SIGSTORE_FULCIO_URL=$COSIGN_FULCIO_URL
    export SIGSTORE_OIDC_ISSUER=$COSIGN_OIDC_ISSUER
    export SIGSTORE_REKOR_URL=$COSIGN_REKOR_URL
    export REKOR_REKOR_SERVER=$COSIGN_REKOR_URL
    Copy to clipboard

    BASE_HOSTNAME_OF_RHTAS_SERVICE 替换为 tas_single_node_base_hostname 的 变量的值,并将 OIDC_ISSUER_URL 替换为您的 OpenID Connect (OIDC)供应商 URL 字符串。

  3. 初始化更新框架(TUF)系统:

    Example

    cosign initialize
    Copy to clipboard

  4. 为测试容器镜像签名。

    1. 创建一个空容器镜像:

      Example

      echo "FROM scratch" > ./tmp.Dockerfile
      podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
      Copy to clipboard

    2. 将空容器镜像推送到 ttl.sh 临时 registry:

      Example

      podman push ttl.sh/rhtas/test-image:1h
      Copy to clipboard

    3. 为容器镜像签名:

      语法

      cosign sign -y IMAGE_NAME:TAG
      Copy to clipboard

      Example

      cosign sign -y ttl.sh/rhtas/test-image:1h
      Copy to clipboard

      此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。

    4. 删除临时 Docker 文件:

      Example

      rm ./tmp.Dockerfile
      Copy to clipboard

  5. 创建 predicate.json 文件:

    Example

    {
      "builder": {
        "id": "https://localhost/dummy-id"
      },
      "buildType": "https://example.com/tekton-pipeline",
      "invocation": {},
      "buildConfig": {},
      "metadata": {
        "completeness": {
          "parameters": false,
          "environment": false,
          "materials": false
        },
        "reproducible": false
      },
      "materials": []
    }
    Copy to clipboard

    如需有关 schema 布局的更多信息,请参阅 SLSA provenance predicate 规格

  6. predicate.json 文件与容器镜像关联:

    语法

    cosign attest -y --predicate ./predicate.json --type slsaprovenance IMAGE_NAME:TAG
    Copy to clipboard

    Example

    cosign attest -y --predicate ./predicate.json --type slsaprovenance ttl.sh/rhtas/test-image:1h
    Copy to clipboard

  7. 验证容器镜像是否至少有一个测试和签名:

    语法

    cosign tree IMAGE_NAME:TAG
    Copy to clipboard

    Example

    cosign tree ttl.sh/rhtas/test-image:1h
    
    📦 Supply Chain Security Related artifacts for an image: ttl.sh/rhtas/test-image@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35
    └── 💾 Attestations for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att
       └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e
    └── 🔐 Signatures for an image tag: ttl.sh/rhtas/test-image:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig
       └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
    Copy to clipboard

  8. 使用企业联系人验证容器镜像:

    语法

    ec validate image --image IMAGE_NAME:TAG --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
    Copy to clipboard

    Example

    ec validate image --image ttl.sh/rhtas/test-image:1h --certificate-identity-regexp 'jdoe@example.com' --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' --output yaml --show-successes
    
    success: true
    successes:
      - metadata:
          code: builtin.attestation.signature_check
        msg: Pass
      - metadata:
          code: builtin.attestation.syntax_check
        msg: Pass
      - metadata:
          code: builtin.image.signature_check
        msg: Pass
    ec-version: v0.1.2427-499ef12
    effective-time: "2024-01-21T19:57:51.338191Z"
    key: ""
    policy: {}
    success: true
    Copy to clipboard

    企业合同生成 pass-fail 报告,其中包含有关任何安全违反情况的详细信息。添加 --info 标志时,报告包括所有找到违反情况的详情和可能的解决方案。

其他资源

其它资源

  • 如需更多信息,请参阅 Enterprise Contract 网站
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.