4.3. 轮转 Fulcio 证书


您可以主动轮转 Fulcio 服务使用的证书。此流程指导您完成旧的 Fulcio 证书,并使用要使用的 Red Hat Trusted Artifact Signer (RHTAS)的新证书替换它。使旧的 Fulcio 证书过期仍允许您验证旧证书签名的工件。

先决条件

  • 安装在 Red Hat OpenShift Container Platform 上运行的 RHTAS operator。
  • 正在运行的 Securesign 实例。
  • 安装了 ocopensslcosign 二进制文件的工作站。

流程

  1. tuftool 二进制文件从 OpenShift 集群下载到您的工作站。

    重要

    tuftool 二进制文件仅适用于 Linux 操作系统。

    1. 在主页中,单击 ? 图标,单击 Command line tools,转至 tuftool 下载部分,然后点击您的平台的链接。
    2. 在工作站上打开一个终端,解压缩二进制 .gz 文件,并设置 execute 位:

      Example

      $ gunzip tuftool-amd64.gz
      $ chmod +x tuftool-amd64
      Copy to Clipboard Toggle word wrap

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

      Example

      $ sudo mv tuftool-amd64 /usr/local/bin/tuftool
      Copy to Clipboard Toggle word wrap

  2. 从命令行登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT
    Copy to Clipboard Toggle word wrap

    Example

    $ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
    Copy to Clipboard Toggle word wrap

    注意

    您可以从 OpenShift Web 控制台找到用于命令行的登录令牌和 URL。登录 OpenShift Web 控制台。单击您的用户名,然后单击 Copy login command。如果被要求,再次提供您的用户名和密码,然后单击 Display Token 以查看该命令。

  3. 切换到 RHTAS 项目:

    Example

    $ oc project trusted-artifact-signer
    Copy to Clipboard Toggle word wrap

  4. 生成新证书,以及新的公钥和私钥:

    Example

    $ openssl ecparam -genkey -name prime256v1 -noout -out new-fulcio.pem
    $ openssl ec -in new-fulcio.pem -pubout -out new-fulcio-public.pem
    $ openssl ec -in new-fulcio.pem -out new-fulcio.pass.pem -des3 -passout pass:"CHANGE_ME"
    $ openssl req -new -x509 -key new-fulcio.pass.pem -out new-fulcio.cert.pem
    Copy to Clipboard Toggle word wrap

    CHANGE_ME 替换为新密码。

    重要

    证书和密钥必须具有唯一的文件名。

  5. 创建新 secret:

    Example

    $ oc create secret generic fulcio-config \
    --from-file=private=new-fulcio.pass.pem \
    --from-file=cert=new-fulcio.cert.pem \
    --from-literal=password=CHANGE_ME
    Copy to Clipboard Toggle word wrap

    CHANGE_ME 替换为新密码。

    注意

    此处的密码必须与用于生成新私钥和公钥的密码匹配。

  6. 配置更新框架(TUF)服务以使用新的 Fulcio 证书。

    1. 设置 shell 环境:

      Example

      $ export WORK="${HOME}/trustroot-example"
      $ export ROOT="${WORK}/root/root.json"
      $ export KEYDIR="${WORK}/keys"
      $ export INPUT="${WORK}/input"
      $ export TUF_REPO="${WORK}/tuf-repo"
      $ export TUF_SERVER_POD="$(oc get pod --selector=app.kubernetes.io/component=tuf --no-headers -o custom-columns=":metadata.name")"
      Copy to Clipboard Toggle word wrap

    2. 创建临时 TUF 目录结构:

      Example

      $ mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"
      Copy to Clipboard Toggle word wrap

    3. 将 TUF 内容下载到临时 TUF 目录结构中:

      Example

      $ oc extract --to "${KEYDIR}/" secret/tuf-root-keys
      $ oc cp "${TUF_SERVER_POD}:/var/www/html" "${TUF_REPO}"
      $ cp "${TUF_REPO}/root.json" "${ROOT}"
      Copy to Clipboard Toggle word wrap

    4. 查找活跃的 Fulcio 证书文件名。在本地 TUF 存储库中打开最新的目标文件,例如 1.targets.json。在这个文件中,您将找到活跃的 Fulcio 证书文件名,例如 fulcio_v1.crt.pem。使用这个活跃 Fulcio 证书文件名设置环境变量:

      Example

      $ export ACTIVE_CERT_NAME=fulcio_v1.crt.pem
      Copy to Clipboard Toggle word wrap

    5. 从 OpenShift 中提取活跃的 Fulico 证书:

      Example

      $ oc get secret $(oc get fulcio securesign-sample -o jsonpath='{.status.certificate.caRef.name}') -o jsonpath='{.data.cert}' | base64 -d > $ACTIVE_CERT_NAME
      Copy to Clipboard Toggle word wrap

    6. 使旧证书过期:

      Example

      $ tuftool rhtas \
        --root "${ROOT}" \
        --key "${KEYDIR}/snapshot.pem" \
        --key "${KEYDIR}/targets.pem" \
        --key "${KEYDIR}/timestamp.pem" \
        --set-fulcio-target "$ACTIVE_CERT_NAME" \
        --fulcio-uri "https://fulcio.rhtas" \
        --fulcio-status "Expired" \
        --outdir "${TUF_REPO}" \
        --metadata-url "file://${TUF_REPO}"
      Copy to Clipboard Toggle word wrap

    7. 添加新的 Fulcio 证书:

      Example

      $ tuftool rhtas \
        --root "${ROOT}" \
        --key "${KEYDIR}/snapshot.pem" \
        --key "${KEYDIR}/targets.pem" \
        --key "${KEYDIR}/timestamp.pem" \
        --set-fulcio-target "new-fulcio.cert.pem" \
        --fulcio-uri "https://fulcio.rhtas" \
        --outdir "${TUF_REPO}" \
        --metadata-url "file://${TUF_REPO}"
      Copy to Clipboard Toggle word wrap

    8. 将这些更改上传到 TUF 服务器:

      Example

      $ oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"
      Copy to Clipboard Toggle word wrap

    9. 删除工作目录:

      Example

      $ rm -r $WORK
      Copy to Clipboard Toggle word wrap

  7. 更新 Securesign Fulcio 配置:

    Example

    $ read -r -d '' SECURESIGN_PATCH <<EOF
    [
    {
        "op": "replace",
        "path": "/spec/fulcio/certificate/privateKeyRef",
        "value": {"name": "fulcio-config", "key": "private"}
    },
    {
        "op": "replace",
        "path": "/spec/fulcio/certificate/privateKeyPasswordRef",
        "value": {"name": "fulcio-config", "key": "password"}
    },
    {
        "op": "replace",
        "path": "/spec/fulcio/certificate/caRef",
        "value": {"name": "fulcio-config", "key": "cert"}
    },
    {
        "op": "replace",
        "path": "/spec/ctlog/rootCertificates",
        "value": [{"name": "fulcio-config", "key": "cert"}]
    }
    ]
    EOF
    Copy to Clipboard Toggle word wrap

  8. Securesign 实例进行补丁:

    Example

    $ oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"
    Copy to Clipboard Toggle word wrap

  9. 等待 Fulcio 服务器重新部署:

    Example

    $ oc wait pod -l app.kubernetes.io/name=fulcio-server --for=condition=Ready
    $ oc wait pod -l app.kubernetes.io/name=ctlog --for=condition=Ready
    Copy to Clipboard Toggle word wrap

  10. 使用更新的 TUF 配置更新 cosign 配置:

    Example

    $ cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
    Copy to Clipboard Toggle word wrap

    现在,您已准备好使用新的 Fulcio 证书签名并验证您的工件。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat