23 个版本
0.10.3 | 2024 年 3 月 15 日 |
---|---|
0.10.2 | 2023 年 12 月 6 日 |
0.10.1 | 2023 年 11 月 8 日 |
0.9.0 | 2023 年 3 月 3 日 |
0.1.0 | 2019 年 11 月 9 日 |
在 Web 编程 中排名 591
每月下载 328 次
485KB
10K SLoC
tuftool 是一个用于生成和签名 TUF 存储库的 Rust 命令行工具。
依赖关系
在安装 tuftool
之前,请确保您的系统上存在以下依赖项
- OpenSSL:在 Ubuntu 上安装
libssl-dev
,或在 Fedora 上安装openssl-devel
。
安装
要安装 tuftool
的最新版本
cargo install --force tuftool
默认情况下,cargo 将二进制文件安装到 ~/.cargo/bin
,因此您需要在您的路径中包含此路径。有关安装 Rust 二进制存储库的更多信息,请参阅 cargo 书籍。
最小 TUF 仓库
以下是如何使用 tuftool
创建和下载 TUF 仓库的示例。首先,创建一个工作目录
export WRK="${HOME}/tuftool-example"
mkdir -p "${WRK}"
创建 root.json 和签名密钥
对于生产环境,您可能希望使用 AWS KMS 等服务,但在此示例中,我们将创建本地文件作为密钥
# we will store our root.json in $WRK/root
mkdir "${WRK}/root"
# save the path to the root.json we are about to create, we will use it a lot
export ROOT="${WRK}/root/root.json"
# we will store our signing keys in $WRK/keys
mkdir "${WRK}/keys"
# instantiate a new root.json
tuftool root init "${ROOT}"
# set the root file's expiration date
tuftool root expire "${ROOT}" 'in 6 weeks'
# set the signing threshold for each of the standard signing roles. we are saying
# that each of the following roles must have at least 1 valid signature
tuftool root set-threshold "${ROOT}" root 1
tuftool root set-threshold "${ROOT}" snapshot 1
tuftool root set-threshold "${ROOT}" targets 1
tuftool root set-threshold "${ROOT}" timestamp 1
# create an RSA key and store it as a file. this requires openssl on your system
# this command both creates the key and adds it to root.json for the root role
tuftool root gen-rsa-key "${ROOT}" "${WRK}/keys/root.pem" --role root
# for this example we will re-use the same key for the other standard roles
tuftool root add-key "${ROOT}" -k "${WRK}/keys/root.pem" --role snapshot
tuftool root add-key "${ROOT}" -k "${WRK}/keys/root.pem" --role targets
tuftool root add-key "${ROOT}" -k "${WRK}/keys/root.pem" --role timestamp
# sign root.json
tuftool root sign "${ROOT}" -k "${WRK}/keys/root.pem"
创建新的 TUF 仓库
现在我们已经有了 root.json 文件,我们可以创建并签名一个 TUF 仓库。
# create a directory to hold the targets that we will sign. we call this the
# 'input' directory because these are the targets that we want to put into
# our TUF repo
mkdir -p "${WRK}/input"
# create the targets that we want in our TUF repo
echo "1" > "${WRK}/input/1.txt"
echo "2" > "${WRK}/input/2.txt"
# create a tuf repo!
tuftool create \
--root "${ROOT}" \
--key "${WRK}/keys/root.pem" \
--add-targets "${WRK}/input" \
--targets-expires 'in 3 weeks' \
--targets-version 1 \
--snapshot-expires 'in 3 weeks' \
--snapshot-version 1 \
--timestamp-expires 'in 1 week' \
--timestamp-version 1 \
--outdir "${WRK}/tuf-repo"
# you can see our signed repository's metadata here:
ls "${WRK}/tuf-repo/metadata"
# and you can see our signed repository's targets here:
ls "${WRK}/tuf-repo/targets"
### Update TUF Repo
# Change one of the target files
echo "1.1" > "${WRK}/input/1.txt"
# update tuf repo!
tuftool update \
--root "${ROOT}" \
--key "${WRK}/keys/root.pem" \
--add-targets "${WRK}/input" \
--targets-expires 'in 3 weeks' \
--targets-version 2 \
--snapshot-expires 'in 3 weeks' \
--snapshot-version 2 \
--timestamp-expires 'in 1 week' \
--timestamp-version 2 \
--outdir "${WRK}/tuf-repo" \
--metadata-url file:///$WRK/tuf-repo/metadata
下载 TUF 仓库
现在我们已经创建了 TUF 仓库,我们可以使用下载命令来检查它。通常,下载命令用于通过 HTTP/S URL 下载远程仓库,但在此示例中,我们将使用基于文件的 URL 从本地仓库下载。
# download tuf repo
tuftool download \
--root "${ROOT}" \
-t "file://${WRK}/tuf-repo/targets" \
-m "file://${WRK}/tuf-repo/metadata" \
"${WRK}/tuf-downlaod"
HTTP 代理支持
tuftool
遵循 HTTPS_PROXY
和 NO_PROXY
环境变量。
容器
您可以构建一个简单的容器镜像,以避免在本地机器上安装 Rust 工具链和依赖项。
使用 Docker 或 Finch 构建镜像(使用相同的参数语法,只需将 docker
替换为 finch
)
docker build -t tuftool .
要使用 tuftool,将主机工作目录挂载到 /share
。
例如,要将当前目录挂载为 download
,您可能需要执行以下操作:
docker run -it -v $(pwd):/share tuftool download "/share/some_directory" ...
测试
单元测试通常按以下方式运行:cargo test
。集成测试需要有效的 AWS 凭证,默认情况下由名为 integ
的功能禁用。要运行所有测试,包括集成测试,请使用以下命令: cargo test
或 AWS_PROFILE=test-profile cargo test --features 'integ'
并指定特定配置文件。
依赖关系
~48–65MB
~1M SLoC