Skip to content

Infra: enable HSTS on dadeda.design after Cloudflare cutover bake-in (~2 weeks) #63

Description

@khurchla

Surfaced during the Cloudflare apex cutover (~10–14 days from now). Tagged post-launch.

Context

During the apex cutover for dadeda.design (cutover landed 2026-05-11), the SSL/TLS hardening step (Batch 3 of the migration) explicitly deferred enabling HTTP Strict Transport Security (HSTS).

Why deferred: HSTS tells browsers "for the next N seconds, refuse to even attempt http:// for this domain." It's a strong security commitment, but the policy is cached client-side for the full max-age (typically 1 year once stable). If anything goes wrong with the TLS cert or the apex setup within the cache window, users with cached HSTS get a hard error with no http fallback path.

For a brand-new apex cutover, this is too risky on day one. Best practice: let the cutover bake for a week or two, confirm cert renewal and edge stability, THEN enable HSTS with a short max-age first, ramp up.

Proposed plan

  1. Wait ~10–14 days from the cutover date (2026-05-11) to confirm no cert/edge issues have surfaced.
  2. Enable HSTS with a short max-age first:
    • Cloudflare zone → SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) → Enable
    • max-age: 86400 (1 day) — short enough that any rollback recovers within a day
    • include subdomains: leave OFF initially (only enable after confirming www and any future subdomains also serve over TLS exclusively)
    • preload: OFF initially (preload submission to browser vendors is irreversible without browser-vendor cooperation; treat as a separate decision)
  3. Run for a week, monitor for any cert issues, browser console warnings, or visitor reports.
  4. Bump max-age to 31536000 (1 year) once confident.
  5. Optionally consider include subdomains and preload only if there's no future subdomain that might intentionally serve plain HTTP (highly unlikely for this site).

Decision to document at that time

Whether to opt into the HSTS Preload List (hstspreload.org). Preload is essentially irrevocable on a year+ timescale because browsers bake the list into their binaries. Decision point: would I ever want a subdomain of dadeda.design to serve plain HTTP, even temporarily? If no, preload is safe.

Acceptance

  • HSTS enabled with max-age=31536000
  • A note added to docs/adr/003-cloudflare-free-tier.md Consequences (or a new ADR if preload is involved) capturing the HSTS posture
  • No visitor-reported TLS failures during ramp

Labels: post-launch, infra

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions