5.8 KiB
StellaOps Trust Bootstrap Guide
Sprint: SPRINT_20260125_003 - WORKFLOW-001 Last updated: 2026-01-25
Overview
This guide covers the initial trust setup for a new StellaOps deployment. Trust bootstrap establishes the cryptographic foundations for secure attestation and verification.
Prerequisites
- StellaOps CLI installed (
stellacommand available) - Network access to TUF repository (or offline trust bundle)
- Sufficient permissions to create keys in
/etc/stellaops/keys/ - For keyless mode: OIDC identity provider configured
Quick Start
Online Bootstrap
# Initialize trust from organization's TUF repository
./devops/scripts/bootstrap-trust.sh \
--tuf-url https://trust.example.com/tuf/ \
--pin rekor-key-v1
Offline Bootstrap (Air-Gapped)
# Import pre-packaged trust bundle
./devops/scripts/bootstrap-trust-offline.sh \
/media/usb/trust-bundle-2026-01-25.tar.zst
Detailed Steps
Step 1: Generate Signing Keys (Optional)
If using local signing keys (not keyless/OIDC):
# Create key directory
mkdir -p /etc/stellaops/keys
chmod 700 /etc/stellaops/keys
# Generate ECDSA P-256 signing key
stella keys generate \
--type ecdsa-p256 \
--out /etc/stellaops/keys/signing-key.pem
# Or use OpenSSL
openssl ecparam -name prime256v1 -genkey -noout \
-out /etc/stellaops/keys/signing-key.pem
chmod 600 /etc/stellaops/keys/signing-key.pem
Step 2: Initialize TUF Client
# Initialize with your organization's TUF repository
stella trust init \
--tuf-url https://trust.example.com/tuf/ \
--service-map sigstore-services-v1 \
--pin rekor-key-v1 rekor-key-v2
# Verify initialization
stella trust status
The --pin option specifies which Rekor keys to trust. Pin multiple keys during
rotation periods.
Step 3: Verify TUF Metadata
# Check trust status
stella trust status --show-keys --show-endpoints
# Expected output:
# TUF Repository: https://trust.example.com/tuf/
# Service Map: sigstore-services-v1
# Trusted Keys:
# - rekor-key-v1 (expires: 2027-01-01)
# - rekor-key-v2 (expires: 2028-01-01)
# Endpoints:
# - Rekor: https://rekor.sigstore.dev
# - Fulcio: https://fulcio.sigstore.dev
Step 4: Test Sign/Verify Cycle
# Create a test payload
echo "StellaOps bootstrap test" > /tmp/test-payload.txt
# Sign with your key
stella sign /tmp/test-payload.txt \
--key /etc/stellaops/keys/signing-key.pem \
--out /tmp/test.sig
# Verify signature
stella verify /tmp/test-payload.txt \
--sig /tmp/test.sig
# Clean up
rm /tmp/test-payload.txt /tmp/test.sig
Step 5: Test Rekor Submission (Online Only)
# Create and submit an attestation
stella attest create /tmp/test-payload.txt \
--type stellaops.io/predicates/test@v1 \
--rekor-submit
# Verify inclusion in transparency log
stella attest verify /tmp/test-payload.txt \
--check-inclusion
Offline Bootstrap
For air-gapped deployments without network access:
Create Trust Bundle (Connected System)
On a system with network access, create a trust bundle:
stella trust snapshot export \
--include-tiles \
--out trust-bundle-$(date +%Y-%m-%d).tar.zst
Transfer and Import (Air-Gapped System)
# Transfer bundle via USB, DVD, or approved data diode
# Then import:
./devops/scripts/bootstrap-trust-offline.sh \
/media/usb/trust-bundle-2026-01-25.tar.zst
# Optional: Reject stale bundles
./devops/scripts/bootstrap-trust-offline.sh \
/media/usb/trust-bundle-2026-01-25.tar.zst \
--reject-if-stale 7d
Configuration Options
TUF Client Configuration
After bootstrap, TUF client configuration is stored in:
~/.local/share/StellaOps/TufCache/
Key files:
root.json- Root of trust (only updated via ceremony)targets.json- List of trusted targetssnapshot.json- Point-in-time snapshot of targetstimestamp.json- Freshness guarantee (regularly updated)
Environment Variables
# Override cache directory
export STELLAOPS_TUF_CACHE=/custom/path
# Enable debug logging
export STELLAOPS_LOG_LEVEL=debug
# Offline mode (no network calls)
export STELLAOPS_OFFLINE=true
Troubleshooting
Error: "TUF metadata verification failed"
The TUF root key may have been rotated. Obtain the new root.json from your security team and re-bootstrap:
stella trust init \
--tuf-url https://trust.example.com/tuf/ \
--root-json /path/to/new/root.json \
--force
Error: "Rekor connectivity check failed"
- Verify network access to Rekor endpoint
- Check firewall rules for HTTPS (port 443)
- Verify the Rekor URL in service map is correct
- Try forcing a sync:
stella trust sync --force
Error: "Key not found in trust store"
The pinned key may not exist in the TUF repository. Check available keys:
stella trust status --show-keys
Offline: "Bundle is stale"
The trust bundle exceeds the staleness threshold. Obtain a fresh bundle from a connected system:
# On connected system
stella trust snapshot export --out fresh-bundle.tar.zst
# Transfer and import
./devops/scripts/bootstrap-trust-offline.sh fresh-bundle.tar.zst
Maintenance
Periodic Sync
Set up a cron job to keep TUF metadata fresh:
# Every 6 hours
0 */6 * * * /usr/local/bin/stella trust sync --quiet
Updating Air-Gap Bundles
For air-gapped systems, schedule regular bundle updates based on your organization's freshness requirements (typically 7-30 days).
Next Steps
- Configure CI/CD to use the signing key
- Set up key rotation procedures (see
key-rotation-runbook.md) - Configure monitoring for trust state freshness
- For air-gap: Establish bundle transfer schedule