docs: mark the FUT Squad Update cert fix applied (fbc0da2)

Updates status from root-caused to fixed, and records that option 1 (IP SAN) was
taken across the three cert generators, with the verification and the operator-gated
production rebuild that remains.
This commit is contained in:
funman300
2026-08-18 15:58:18 +00:00
parent fbc0da2a1b
commit 5c40b4993f
+23 -15
View File
@@ -1,7 +1,10 @@
# FIFA 17 "FUT Squad Update" download failure — root cause # FIFA 17 "FUT Squad Update" download failure — root cause
**Status:** root-caused, not yet fixed. Blocks any FIFA session pointed at a stack whose **Status:** FIXED in the cert generators (commit `fbc0da2`) — the SAN now carries the
roster server presents the current self-signed certificate. advertised IP. Verified without the client (a verifying TLS client rejects the old
DNS-only cert by IP and accepts the new one; the entrypoint reconcile is idempotent).
Live confirmation needs the production container rebuilt with `OPENFUT_ADVERTISE` set,
which is operator-gated. See "Fix options (applied)" below.
**Symptom (client):** entering the FUT hub shows **Symptom (client):** entering the FUT hub shows
@@ -96,18 +99,23 @@ forces the fetch — but that has not been measured. The known-good hook log use
control (Aug 12 19:13) **predates the Aug 13 certificate regeneration**, so it is not control (Aug 12 19:13) **predates the Aug 13 certificate regeneration**, so it is not
evidence about the current certificate. evidence about the current certificate.
## Fix options (none applied) ## Fix options — option 1 applied (`fbc0da2`)
1. **Reissue the certificate with an `iPAddress` SAN** for the advertised address. Smallest 1. **Reissue the certificate with an `iPAddress` SAN** **APPLIED.** The three cert
change, addresses the concrete mismatch, and benefits the redirector too. Note generators now put the advertised IP in the SAN: the docker entrypoint reconciles it at
`openfut-tls` exists precisely so the redirector and roster hosts cannot configure TLS startup from `OPENFUT_ADVERTISE` (runtime value, unknown at build time; reissued only
separately — the 2026-08-11 mismatch it was written for is the same class of bug. when missing, so restarts don't churn the fingerprint), the Dockerfile keeps `openssl`
2. **Serve the roster over plain HTTP** for an isolated stack, by pointing in the runtime image and bakes a loopback-IP baseline, and `openfut-fut.sh` defaults the
`ROSTERUPDATE_URL`/`ROSTER_URL` at a staging-owned HTTP server. Sidesteps TLS entirely; SAN IP to the host's primary LAN IP. Smallest change, benefits the redirector too. Note
only acceptable off production. `openfut-tls` only *loads* the cert — it does not generate it — so the generation fix
3. **Find the real validation site** on the roster path and extend the patch set. Most lives in these three scripts regardless of whether the roster is served by Python or the
faithful, most work, and the only option that restores the original assumption. Rust `openfut-roster-host`.
2. **Serve the roster over plain HTTP** — not taken. Sidesteps TLS entirely but only
acceptable off production, and option 1 fixes it properly everywhere.
3. **Find the real validation site** on the roster path and extend the patch set — not
needed once the SAN matches; kept on record as the most-faithful alternative.
Option 1 is the recommended starting point because it is testable without the client: Option 1 was chosen because it is testable without the client: a verifying TLS client
a probe that validates hostname/IP against the presented certificate will fail before the checking the cert by IP fails on the old cert and passes on the new one. That test now
fix and pass after. passes (`scripts`-style probe run at fix time); the remaining step is the operator
rebuilding the production container so the reissued cert is actually served.