Cookie-Sicherheit für Caddy konfigurieren

Schritt-für-Schritt-Anleitung: Secure, HttpOnly und SameSite auf Caddy einrichten — mit Caddyfile Header-Rewrite, Cookie-Prefixes und fertigen Konfigurationen zum Kopieren.

Caddy · Schritt für Schritt

Sichere Cookies auf Caddy

Caddy ist ein moderner Webserver mit automatischem HTTPS — kein manuelles Zertifikat-Management, kein certbot, keine Let's-Encrypt-Konfiguration. Die header-Direktive im Caddyfile macht die Cookie-Absicherung denkbar einfach: Eine Zeile mit einem Regex-Rewrite sichert alle Upstream-Cookies mit Secure, HttpOnly und SameSite ab.

Diese Anleitung zeigt die Konfiguration in vier Schritten: vom Setzen der Flags über SameSite-Feintuning und Cookie-Prefixes bis zur Verifizierung. Cookie-Sicherheit bringt 15 von 166 Punkten im Wolf-Agents Web Security Check. Da Caddy Auto-HTTPS erzwingt, ist das Secure-Flag besonders relevant — es schützt Cookies auch bei versehentlichen HTTP-Anfragen.

1 Schritt 1 von 4

Caddyfile — Cookie-Flags per Header-Rewrite setzen

Die header-Direktive in Caddy unterstützt Regex-Ersetzungen auf Response-Headern. Das Pattern (.+) matcht den gesamten Cookie-Wert und fügt am Ende die gewünschten Flags hinzu. Da Caddy Auto-HTTPS erzwingt, ist Secure hier besonders sinnvoll.

/etc/caddy/Caddyfile header directive
# Caddyfile — Cookie-Flags per Header-Rewrite setzen
ihre-domain.de {
    header Set-Cookie "(.+)" "$1; Secure; HttpOnly; SameSite=Lax"

    reverse_proxy localhost:3000
}
Prüfen Sie, ob Ihre Anwendung bereits Cookie-Flags setzt — dieser Regex fügt sie immer hinzu und kann zu doppelten Flags führen.
Doppelte Flags erkennen Diagnose
# Prüfen, ob das Backend bereits Flags setzt
curl -sI https://ihre-domain.de/login | grep -i set-cookie

# Ausgabe OHNE Caddyfile-Rewrite (nur Backend-Flags):
# Set-Cookie: session=abc123; HttpOnly

# Ausgabe MIT Caddyfile-Rewrite (mögliche Doppelung):
# Set-Cookie: session=abc123; HttpOnly; Secure; HttpOnly; SameSite=Lax
Konfiguration prüfen und neu laden:
caddy validate --config /etc/caddy/Caddyfile && caddy reload --config /etc/caddy/Caddyfile
2 Schritt 2 von 4

SameSite und Cookie-Prefixes konfigurieren

Das SameSite-Attribut steuert, ob Cookies bei Cross-Site-Anfragen mitgesendet werden. Strict blockiert alle Cross-Site-Requests (Maximum-Schutz gegen CSRF), Lax erlaubt Top-Level-GET-Navigation (bessere UX bei externen Links). Im Caddyfile können Sie mehrere header-Direktiven kombinieren, um verschiedene Cookies unterschiedlich zu behandeln.

/etc/caddy/Caddyfile SameSite
# SameSite=Strict für hochsensitive Anwendungen
ihre-domain.de {
    header Set-Cookie "(.+)" "$1; Secure; HttpOnly; SameSite=Strict"
    reverse_proxy localhost:3000
}

# SameSite=Lax für Standard-Websites (empfohlen)
ihre-domain.de {
    header Set-Cookie "(.+)" "$1; Secure; HttpOnly; SameSite=Lax"
    reverse_proxy localhost:3000
}

# Gezieltes Matching: Nur Session-Cookie absichern
ihre-domain.de {
    header Set-Cookie "(session.+)" "$1; Secure; HttpOnly; SameSite=Strict"
    header Set-Cookie "(_ga.+)" "$1; Secure; SameSite=Lax"
    reverse_proxy localhost:3000
}
Wert Cross-Site-Verhalten Empfehlung
Strict Cookie wird nie bei Cross-Site-Requests gesendet Banking, Admin-Panels, sensitive APIs
Lax Cookie wird bei Top-Level-GET-Navigation gesendet Standard für die meisten Websites
None Cookie wird immer gesendet (benötigt Secure) Nur für Cross-Site-Embeds / iFrames
Bei E-Commerce-Shops mit Payment-Providern (Stripe, PayPal): Verwenden Sie SameSite=Lax, da Redirect-Returns von Payment-Seiten sonst die Session verlieren.
3 Schritt 3 von 4

Doppelte Flags vermeiden (Best Practices)

Da Caddys header-Direktive einen generischen String-Regex verwendet, können Flags doppelt gesetzt werden, wenn das Backend sie bereits mitgibt. Cookie-Prefixes (__Host-, __Secure-) sind der empfohlene Weg, die Verantwortung klar zu trennen: Das Backend setzt den Prefix und die kritischen Flags, Caddy sichert nur was fehlt.

/etc/caddy/Caddyfile Prefixes
# Backend muss Cookies mit __Host- oder __Secure- Prefix setzen
# Caddy leitet diese unverändert weiter (oder ergänzt fehlende Flags)

# Beispiel: Backend setzt
#   Set-Cookie: __Host-session=abc123; Secure; Path=/; HttpOnly; SameSite=Strict

# Caddyfile: Header-Rewrite nur wenn Flags noch fehlen
ihre-domain.de {
    # Nur Cookies OHNE "Secure" absichern (Negativ-Lookahead)
    # Hinweis: Standard-Caddy unterstützt kein Lookahead — Flags ggf. im Backend setzen
    header Set-Cookie "(.+)" "$1; Secure; HttpOnly; SameSite=Strict"
    reverse_proxy localhost:3000
}
Empfehlung: Cookie-Flags im Backend setzen

Die sauberste Lösung ist, Cookie-Flags direkt in der Anwendung (Node.js, PHP, Python) zu setzen. Caddy dient dann als zusätzliche Sicherheitsebene (Defense in Depth) — nicht als einzige Quelle der Flags.

4 Schritt 4 von 4

Verifizierung mit Caddy

Nach dem Reload prüfen Sie, ob die Cookie-Flags korrekt gesetzt werden. Nutzen Sie caddy validate für die Syntax-Prüfung, caddy reload für einen unterbrechungsfreien Neustart und curl für einen schnellen Header-Check. Browser DevTools (Application → Cookies) bieten eine visuelle Gesamtübersicht.

Terminal Verifizierung
# 1. Caddyfile-Syntax prüfen
caddy validate --config /etc/caddy/Caddyfile

# 2. Konfiguration neu laden (ohne Downtime)
caddy reload --config /etc/caddy/Caddyfile

# Alternativ via systemd:
sudo systemctl reload caddy

# 3. Cookie-Flags per curl verifizieren
curl -sI https://ihre-domain.de/login | grep -i set-cookie

# Erwartete Ausgabe:
# Set-Cookie: session=...; Secure; HttpOnly; SameSite=Lax
Browser DevTools als Alternative

Öffnen Sie DevTools (F12) → Application → Cookies → Ihre Domain. Prüfen Sie die Spalten HttpOnly, Secure und SameSite für jeden Cookie. Session-Cookies müssen bei allen drei Spalten ein Häkchen zeigen.

Wie steht Ihre Domain bei Cookie-Sicherheit?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.

Häufig gestellte Fragen

Wie setze ich Cookie-Flags in Caddy?

Im Caddyfile nutzen Sie die header-Direktive mit einem Regex-Rewrite: header Set-Cookie "(.+)" "$1; Secure; HttpOnly; SameSite=Lax" — diese Zeile fügt die Flags zu allen Set-Cookie-Headern hinzu, die der Upstream-Server zurückgibt.

Warum ist das Secure-Flag bei Caddy besonders wichtig?

Caddy erzwingt automatisch HTTPS für alle konfigurierten Domains (Auto-HTTPS). Das Secure-Flag stellt zusätzlich sicher, dass Cookies auch bei versehentlichen HTTP-Redirects oder Subdomains ohne HTTPS nicht im Klartext gesendet werden — eine doppelte Absicherung.

Wie lade ich die Caddy-Konfiguration ohne Downtime neu?

Nutzen Sie caddy reload — dieser Befehl lädt die neue Konfiguration ohne Verbindungsunterbrechungen. Prüfen Sie die Syntax vorher mit caddy validate. Alternativ funktioniert auch systemctl reload caddy auf Linux-Systemen mit systemd.

Was passiert, wenn meine Anwendung bereits Secure und HttpOnly setzt?

Der Regex im Caddyfile fügt die Flags immer hinzu, unabhängig davon, ob sie bereits vorhanden sind. Das kann zu doppelten Flags wie "Secure; HttpOnly; Secure; HttpOnly" führen. Prüfen Sie daher mit curl -sI https://ihre-domain.de | grep -i set-cookie, ob Ihr Backend bereits Flags setzt — und deaktivieren Sie dann ggf. die Header-Direktive im Caddyfile.

Kann ich im Caddyfile verschiedene SameSite-Werte für verschiedene Cookies setzen?

Ja. Sie können mehrere header-Direktiven mit unterschiedlichen Regex-Patterns definieren. Zum Beispiel: header Set-Cookie "(__Host-session.+)" "$1; SameSite=Strict" für Session-Cookies und header Set-Cookie "(_ga.+)" "$1; SameSite=Lax" für Analytics-Cookies.

Wie unterscheidet sich Caddys Header-Rewrite von Nginxs proxy_cookie_flags?

Nginxs proxy_cookie_flags (ab 1.19.3) ist eine spezialisierte Direktive, die Cookie-Attribute nativ versteht und keine Doppelungen erzeugt. Caddys header-Direktive arbeitet mit einem generischen Regex-Replace auf dem Set-Cookie-Header-String — einfacher in der Syntax, aber ohne native Cookie-Parsing. Das bedeutet: Caddys Methode ist anfälliger für doppelte Flags, dafür aber extrem leicht lesbar.

Brauche ich bei Caddy einen separaten Port-443-Eintrag?

Nein. Caddy verwaltet HTTPS vollautomatisch: Es bezieht Let's-Encrypt-Zertifikate selbst, richtet HTTP-to-HTTPS-Redirects ein und erneuert Zertifikate automatisch. Im Caddyfile genügt ihre-domain.de als Bezeichner — Caddy kümmert sich um den Rest.