4.4. タイムスタンプ機関の署名者鍵と証明書チェーンのローテーション


タイムスタンプ機関 (TSA) の署名者鍵と証明書チェーンをプロアクティブにローテーションできます。この手順では、古い TSA 署名者鍵と証明書チェーンを期限切れにし、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しいものに置き換える手順を説明します。古い TSA 署名者鍵と証明書チェーンを期限切れにしても、古い鍵と証明書チェーンによって署名されたアーティファクトを検証することは可能です。

前提条件

  • Red Hat OpenShift Container Platform 上で実行される RHTAS Operator をインストールする。
  • Securesign インスタンスを実行する。
  • oc および openssl バイナリーがインストールされたワークステーション。

手順

  1. OpenShift クラスターからワークステーションに tuftool バイナリーをダウンロードします。

    重要

    tuftool バイナリーは Linux オペレーティングシステムでのみ使用できます。

    1. ホームページから ? アイコンをクリックして、Command line tools をクリックし、tuftool ダウンロードセクションに移動し、プラットフォームのリンクをクリックします。
    2. ワークステーションでターミナルを開き、バイナリー .gz ファイルを展開し、実行ビットを設定します。

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

    3. バイナリーを $PATH 環境内の場所に移動し、名前を変更します。

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

  2. コマンドラインから OpenShift にログインします。

    構文

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

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

    注記

    OpenShift Web コンソールからコマンドラインで使用するログイントークンと URL を確認できます。OpenShift Web コンソールにログインします。ユーザー名をクリックし、Copy login command をクリックします。入力を求められた場合はユーザー名とパスワードをもう一度入力し、Display Token をクリックしてコマンドを表示します。

  3. RHTAS プロジェクトに切り替えます。

    $ oc project trusted-artifact-signer

  4. 新しい証明書チェーンと新しい署名者鍵を生成します。

    重要

    新しい証明書と鍵には一意のファイル名が必要です。

    1. 一時作業ディレクトリーを作成します。

      $ mkdir certs && cd certs

    2. ルート認証局 (CA) の秘密鍵を作成し、パスワードを設定します。

      $ 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) を作成し、パスワードを設定します。

      $ 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. ルート CA を使用して中間 CA 証明書に署名します。

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

      中間 CA 証明書に署名するには、CHANGE_ME をルート CA 秘密鍵のパスワードに置き換えます。

    5. リーフ CA の秘密鍵と CSR を作成し、パスワードを設定します。

      $ 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 証明書に署名します。

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

      リーフ CA 証明書に署名するには、CHANGE_ME を中間 CA 秘密鍵のパスワードに置き換えます。

    7. 新しく作成した証明書を組み合わせて証明書チェーンを作成します。

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

  5. 署名者鍵を使用して新しいシークレットリソースを作成します。

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

  6. 新しい証明書チェーンを使用して新しいシークレットリソースを作成します。

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

  7. パスワード用の新しいシークレットリソースを作成します。

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

    CHANGE_ME を中間 CA 秘密鍵のパスワードに置き換えます。

  8. アクティブな TSA 証明書ファイル名、TSA URL 文字列を見つけて、次の値を使用してシェル環境を設定します。

    $ 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 設定を更新します。

    $ 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 インスタンスにパッチを適用します。

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

  11. TSA サーバーが新しい署名者鍵と証明書チェーンを使用してもう一度デプロイされるのを待ちます。

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

  12. 新しい証明書チェーンを取得します。

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

  13. 新しい TSA 証明書チェーンを使用するように The Update Framework (TUF) サービスを設定します。

    1. シェル環境を設定します。

      $ 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 ディレクトリー構造を作成します。

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

    3. TUF コンテンツを一時的な TUF ディレクトリー構造にダウンロードします。

      $ 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 証明書を期限切れにします。

      $ 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 証明書を追加します。

      $ 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 サーバーにアップロードします。

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

    7. 作業ディレクトリーを削除します。

      $ rm -r $WORK

  14. 更新された TUF 設定で cosign 設定を更新します。

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

    これで、新しい TSA 署名者鍵と証明書を使用するアーティファクトに署名して検証する準備が整いました。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.