第 3 章 更新更新框架元数据文件
默认情况下,更新框架(TUF)元数据文件会在 Securesign 实例的部署日期起 52 周后过期。您至少必须每 52 周更新一次 TUF 元数据文件,然后再过期。红帽建议更新元数据文件,超过一年一次。
此流程指导您刷新根和非 root 元数据文件。
先决条件
- 安装在 Red Hat OpenShift Container Platform 上运行的 RHTAS operator。
- 正在运行的 Securesign 实例。
-
安装了
oc二进制文件的工作站。
流程
将
tuftool二进制文件从 OpenShift 集群下载到您的工作站。重要tuftool二进制文件仅适用于 Linux 操作系统。- 在主页中,单击 ? 图标,单击 Command line tools,转至 tuftool 下载部分,然后点击您的平台的链接。
在工作站上打开一个终端,解压缩二进制
.gz文件,并设置 execute 位:Example
$ gunzip tuftool-amd64.gz $ chmod +x tuftool-amd64将二进制文件移到
$PATH环境中的位置:Example
$ sudo mv tuftool-amd64 /usr/local/bin/tuftool
从命令行登录到 OpenShift:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORTExample
$ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443注意您可以从 OpenShift Web 控制台找到用于命令行的登录令牌和 URL。登录 OpenShift Web 控制台。单击您的用户名,然后单击 Copy login command。如果被要求,再次提供您的用户名和密码,然后单击 Display Token 以查看该命令。
切换到 RHTAS 项目:
Example
$ oc project trusted-artifact-signer配置 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")" $ export TIMESTAMP_EXPIRATION="in 10 days" $ export SNAPSHOT_EXPIRATION="in 26 weeks" $ export TARGETS_EXPIRATION="in 26 weeks" $ export ROOT_EXPIRATION="in 26 weeks"根据您的要求设置过期持续时间。
创建临时 TUF 目录结构:
Example
$ mkdir -p "${WORK}/root/" "${KEYDIR}" "${INPUT}" "${TUF_REPO}"将 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}"您可以在一个命令中更新时间戳、快照和目标元数据:
Example
$ tuftool update \ --root "${ROOT}" \ --key "${KEYDIR}/timestamp.pem" \ --key "${KEYDIR}/snapshot.pem" \ --key "${KEYDIR}/targets.pem" \ --timestamp-expires "${TIMESTAMP_EXPIRATION}" \ --snapshot-expires "${SNAPSHOT_EXPIRATION}" \ --targets-expires "${TARGETS_EXPIRATION}" \ --outdir "${TUF_REPO}" \ --metadata-url "file://${TUF_REPO}"注意您还可以在 TUF 元数据文件的子集上运行 TUF 元数据更新。例如,
timestamp.json元数据文件会超过其他元数据文件的频率。因此,您只能运行以下命令来更新时间戳元数据文件:$ tuftool update \ --root "${ROOT}" \ --key "${KEYDIR}/timestamp.pem" \ --timestamp-expires "${TIMESTAMP_EXPIRATION}" \ --outdir "${TUF_REPO}" \ --metadata-url "file://${TUF_REPO}"只有在要过期时才更新 root 过期日期:
Example
$ tuftool root expire "${ROOT}" "${ROOT_EXPIRATION}"注意如果 root 文件没有接近过期,您可以跳过这一步。
更新根版本:
Example
$ tuftool root bump-version "${ROOT}"再次为 root 元数据文件签名:
Example
$ tuftool root sign "${ROOT}" -k "${KEYDIR}/root.pem"设置新的 root 版本,并复制 root 元数据文件:
Example
$ export NEW_ROOT_VERSION=$(cat "${ROOT}" | jq -r ".signed.version") $ cp "${ROOT}" "${TUF_REPO}/root.json" $ cp "${ROOT}" "${TUF_REPO}/${NEW_ROOT_VERSION}.root.json"将这些更改上传到 TUF 服务器:
Example
$ oc rsync "${TUF_REPO}/" "${TUF_SERVER_POD}:/var/www/html"