4.4. 轮转 Timestamp Authority 签名者密钥和证书链


您可以主动轮转 Timestamp Authority (TSA)签名者密钥和证书链。此流程指导您完成旧的 TSA 签名者密钥和证书链,并使用要使用的 Red Hat Trusted Artifact Signer (RHTAS)替换它们。使旧 TSA 签名者密钥和证书链过期仍允许您验证旧密钥和证书链签名的工件。

先决条件

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

流程

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

    重要

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

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

      Example

      $ gunzip tuftool-amd64.gz
      $ chmod +x tuftool-amd64

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

      Example

      $ sudo mv tuftool-amd64 /usr/local/bin/tuftool

  2. 从命令行登录到 OpenShift:

    语法

    oc login --token=TOKEN --server=SERVER_URL_AND_PORT

    Example

    $ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443

    注意

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

  3. 切换到 RHTAS 项目:

    Example

    $ oc project trusted-artifact-signer

  4. 生成新证书链和新的签名者密钥。

    重要

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

    1. 创建临时工作目录:

      Example

      $ mkdir certs && cd certs

    2. 创建 root 证书颁发机构(CA)私钥并设置密码:

      Example

      $ openssl req -x509 -newkey rsa:2048 -days 365 -sha256 -nodes \
      -keyout rootCA.key.pem -out rootCA.crt.pem \
      -passout pass:"CHANGE_ME" \
      -subj "/C=CC/ST=state/L=Locality/O=RH/OU=RootCA/CN=RootCA" \
      -addext "basicConstraints=CA:true" -addext "keyUsage=cRLSign, keyCertSign"

      CHANGE_ME 替换为新密码。

    3. 创建中间 CA 私钥和证书签名请求(CSR),并设置密码:

      Example

      $ openssl req -newkey rsa:2048 -sha256 \
      -keyout intermediateCA.key.pem -out intermediateCA.csr.pem \
      -passout pass:"CHANGE_ME" \
      -subj "/C=CC/ST=state/L=Locality/O=RH/OU=IntermediateCA/CN=IntermediateCA"

      CHANGE_ME 替换为新密码。

    4. 使用 root CA 签署中间 CA 证书:

      Example

      $ openssl x509 -req -in intermediateCA.csr.pem -CA rootCA.crt.pem -CAkey rootCA.key.pem \
      -CAcreateserial -out intermediateCA.crt.pem -days 365 -sha256 \
      -extfile <(echo "basicConstraints=CA:true\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \
      -passin pass:"CHANGE_ME"

      使用 root CA 私钥密码替换 CHANGE_ME,以签署中间 CA 证书。

    5. 创建叶 CA 私钥和 CSR,并设置密码:

      Example

      $ openssl req -newkey rsa:2048 -sha256 \
      -keyout leafCA.key.pem -out leafCA.csr.pem \
      -passout pass:"CHANGE_ME" \
      -subj "/C=CC/ST=state/L=Locality/O=RH/OU=LeafCA/CN=LeafCA"

    6. 使用中间 CA 签署叶 CA 证书:

      Example

      $ openssl x509 -req -in leafCA.csr.pem -CA intermediateCA.crt.pem -CAkey intermediateCA.key.pem \
        -CAcreateserial -out leafCA.crt.pem -days 365 -sha256 \
        -extfile <(echo "basicConstraints=CA:false\nkeyUsage=cRLSign, keyCertSign\nextendedKeyUsage=critical,timeStamping") \
        -passin pass:"CHANGE_ME"

      CHANGE_ME 替换为中间 CA 私钥密码,以签署叶 CA 证书。

    7. 通过组合新创建的证书来创建证书链:

      Example

      $ cat leafCA.crt.pem intermediateCA.crt.pem rootCA.crt.pem > new-cert-chain.pem

  5. 使用 signer 密钥创建新 secret 资源:

    Example

    $ oc create secret generic rotated-signer-key --from-file=rotated-signer-key=certs/leafCA.key.pem

  6. 使用新证书链创建新 secret 资源:

    Example

    $ oc create secret generic rotated-cert-chain --from-file=rotated-cert-chain=certs/new-cert-chain.pem

  7. 使用密码创建新 secret 资源:

    Example

    $ oc create secret generic rotated-password --from-literal=rotated-password=CHANGE_ME

    CHANGE_ME 替换为中间 CA 私钥密码。

  8. 查找您的活跃 TSA 证书文件名 TSA URL 字符串,并使用这些值配置 shell 环境:

    Example

    $ export ACTIVE_CERT_CHAIN_NAME=tsa.certchain.pem
    $ export TSA_URL=$(oc get timestampauthority securesign-sample -o jsonpath='{.status.url}')/api/v1/timestamp
    $ curl $TSA_URL/certchain -o $ACTIVE_CERT_CHAIN_NAME

  9. 更新 Securesign TSA 配置:

    Example

    $ read -r -d '' SECURESIGN_PATCH <<EOF
    [
        {
            "op": "replace",
            "path": "/spec/tsa/signer/certificateChain",
            "value": {
                "certificateChainRef" : {"name": "rotated-cert-chain", "key": "rotated-cert-chain"}
            }
        },
        {
            "op": "replace",
            "path": "/spec/tsa/signer/file",
            "value": {
                    "privateKeyRef": {"name": "rotated-signer-key", "key": "rotated-signer-key"},
                    "passwordRef": {"name": "rotated-password", "key": "rotated-password"}
                }
        }
    ]
    EOF

  10. Securesign 实例进行补丁:

    Example

    $ oc patch Securesign securesign-sample --type='json' -p="$SECURESIGN_PATCH"

  11. 等待 TSA 服务器使用新的签名者密钥和证书链重新部署:

    Example

    $ oc get pods -w -l app.kubernetes.io/name=tsa-server

  12. 获取新证书链:

    Example

    $ export NEW_CERT_CHAIN_NAME=new_tsa.certchain.pem
    $ curl $TSA_URL/certchain -o $NEW_CERT_CHAIN_NAME

  13. 配置更新框架(TUF)服务,以使用新的 TSA 证书链。

    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")"

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

      Example

      $ mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"

    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}"

    4. 使旧的 TSA 证书过期:

      Example

      $ tuftool rhtas \
        --root "${ROOT}" \
        --key "${KEYDIR}/snapshot.pem" \
        --key "${KEYDIR}/targets.pem" \
        --key "${KEYDIR}/timestamp.pem" \
        --set-tsa-target "$ACTIVE_CERT_CHAIN_NAME" \
        --tsa-uri "$TSA_URL" \
        --tsa-status "Expired" \
        --outdir "${TUF_REPO}" \
        --metadata-url "file://${TUF_REPO}"

    5. 添加新的 TSA 证书:

      Example

      $ tuftool rhtas \
        --root "${ROOT}" \
        --key "${KEYDIR}/snapshot.pem" \
        --key "${KEYDIR}/targets.pem" \
        --key "${KEYDIR}/timestamp.pem" \
        --set-tsa-target "$NEW_CERT_CHAIN_NAME" \
        --tsa-uri "$TSA_URL" \
        --outdir "${TUF_REPO}" \
        --metadata-url "file://${TUF_REPO}"

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

      Example

      $ oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"

    7. 删除工作目录:

      Example

      $ rm -r $WORK

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

    Example

    $ cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json

    现在,您已准备好签名并验证使用新的 TSA 签名器密钥和证书的工件。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.