4.3. Fulcio 証明書のローテーション


Fulcio サービスで使用される証明書をプロアクティブにローテーションできます。この手順では、古い Fulcio 証明書の有効期限を切れさせ、Red Hat Trusted Artifact Signer (RHTAS) が使用できるように新しい証明書に置き換える手順を説明します。古い Fulcio 証明書の有効期限が切れても、古い証明書で署名されたアーティファクトを検証することは可能です。

前提条件

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

手順

  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. 新しい証明書と新しい公開鍵および秘密鍵を生成します。

    $ 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

    CHANGE_ME は、新しいパスワードに置き換えます。

    重要

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

  5. 新規シークレットを作成します。

    $ 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

    CHANGE_ME は、新しいパスワードに置き換えます。

    注記

    ここでのパスワードは、新しい秘密鍵と公開鍵を生成するために使用したパスワードと同じものに指定する必要があります。

  6. 新しい Fulcio 証明書を使用するように 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. アクティブな Fulcio 証明書ファイル名を見つけます。ローカル TUF リポジトリー内の最新のターゲットファイル (例: 1.targets.json) を開きます。このファイルには、アクティブな Fulcio 証明書ファイル名 (例: fulcio_v1.crt.pem) が記載されています。このアクティブな Fulcio 証明書ファイル名で環境変数を設定します。

      $ export ACTIVE_CERT_NAME=fulcio_v1.crt.pem

    5. OpenShift からアクティブな Fulico 証明書を抽出します。

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

    6. 古い証明書を期限切れにします。

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

    7. 新しい Fulcio 証明書を追加します。

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

    8. これらの変更を TUF サーバーにアップロードします。

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

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

      $ rm -r $WORK

  7. Securesign Fulcio 設定を更新します。

    $ 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

  8. Securesign インスタンスにパッチを適用します。

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

  9. Fulcio サーバーが再デプロイされるまで待ちます。

    $ 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

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.