1 Self Update Signing
Claude edited this page 2026-06-29 21:37:15 +00:00

Node-Agent Self-Update — Trust-Modell (#187)

Der Node-Agent vertraut einem Self-Update über den Transport, nicht über eine eincompilierte Signatur. theProx ist self-hosted: Backend und Agent gehören demselben Betreiber, und der Binary-Download läuft entweder über TLS (public Nodes, https://) oder über ein VPN (http:// mit TRUSTED_TRANSPORT=vpn). Die frühere ed25519-Release-Signatur (X-Binary-Sig / .sig-Dateien, eincompilierter UPDATE_PUBKEY_B64) wurde entfernt — sie war für ein self-hosted Modell ohne öffentliche Verteilung unnötiger Schlüssel-Ballast.

Was das Update absichert

  • Transport-Authentizität. Public: https:// (Zertifikat via Reverse-Proxy, siehe Deployment-Public). VPN: das VPN selbst. Klartext http:// zu einem Nicht-localhost-Host ohne TRUSTED_TRANSPORT=vpn lehnt der Agent ab (config::validate_server_url) — er lädt also gar nicht erst über einen ungesicherten Kanal.
  • Integrität via sha256. Backend GET /node-agent-binary/{arch} (server/main.py) sendet den X-Binary-Hash-Header (sha256 über das Binary). Der Agent (Node-Agent/src/self_update.rs) berechnet den Hash über den heruntergeladenen Inhalt und vergleicht. Fehlt der Header oder weicht der Hash ab → Update verweigert, die laufende Binary bleibt aktiv. Kein Fallback.
  • Größencheck. Verdächtig kleine Downloads (< 200 kB) werden abgelehnt.

Release bauen (#CLAUDE.md / Agent-Build-Regel)

cd Node-Agent
# Crate-Version in Cargo.toml erhöhen (CARGO_PKG_VERSION = /agent/latest-version)
cargo build --release --target x86_64-unknown-linux-musl
cp target/x86_64-unknown-linux-musl/release/theprox-node-agent theprox-node-agent-x86_64

Nur die rebuildete Binary committen — keine .sig-Datei mehr. Pro Architektur wiederholen (aarch64). Es gibt keinen Signing-Key und keine Schlüsselrotation mehr.

Files

File Role
Node-Agent/theprox-node-agent-<arch> prebuilt binary (committed)
server/main.py GET /node-agent-binary/{arch} liefert Binary + X-Binary-Hash
Node-Agent/src/self_update.rs lädt, prüft sha256, swapt, systemctl restart

Hinweis: scripts/sign-release.sh und scripts/gen-update-key.sh wurden mit #187 entfernt.