TLS und Zertifikate für Astro konfigurieren

Schritt-für-Schritt-Anleitung: TLS-Konfiguration auf Server-Ebene -- Let's Encrypt, Nginx Reverse Proxy und Hosting-Plattform-Varianten.

Astro · Schritt für Schritt

TLS und Zertifikate in Astro

TLS (Transport Layer Security) verschlüsselt die Verbindung zwischen Browser und Server. TLS-Konfiguration erfolgt nicht in Astro selbst, sondern auf dem Webserver (Nginx, Apache) oder der Hosting-Plattform (Vercel, Netlify). TLS ist mit 4 von 166 Punkten im Wolf-Agents Web Security Check relevant.

Für Self-Hosted Astro mit dem @astrojs/node-Adapter empfiehlt sich ein Nginx Reverse Proxy mit Let's Encrypt. Hosting-Plattformen wie Vercel und Netlify stellen TLS-Zertifikate automatisch bereit. Wolf-Agents nutzt Astro SSR hinter Nginx mit Let's Encrypt und TLS 1.3.

Neben der TLS-Konfiguration ist der HSTS-Header (Strict-Transport-Security) entscheidend: Er weist Browser an, ausschließlich HTTPS zu verwenden und verhindert Downgrade-Angriffe. HSTS können Sie direkt in der Astro-Middleware setzen.

1Schritt 1 von 5

Nginx TLS-Konfiguration

Konfigurieren Sie TLS auf dem Nginx Reverse Proxy. Verwenden Sie TLS 1.2 und 1.3 als Minimum, starke Cipher Suites und OCSP Stapling. Setzen Sie X-Forwarded-Proto, damit Astro erkennt, ob die Verbindung über HTTPS laeuft.

nginx.confEmpfohlen
# Nginx -- TLS-Konfiguration für Astro (SSR oder SSG)
server {
    listen 443 ssl http2;
    server_name ihre-domain.de;

    # Let's Encrypt Zertifikat
    ssl_certificate /etc/letsencrypt/live/ihre-domain.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ihre-domain.de/privkey.pem;

    # TLS-Version und Cipher Suites
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 1.1.1.1 8.8.8.8 valid=300s;

    # Astro SSR Reverse Proxy
    location / {
        proxy_pass http://127.0.0.1:4321;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
2Schritt 2 von 5

Let's Encrypt einrichten

Installieren Sie Certbot und fordern Sie ein kostenloses TLS-Zertifikat an. Die automatische Erneuerung stellt sicher, dass Ihr Zertifikat nie ablaeuft. Konfigurieren Sie einen Deploy-Hook, um Nginx nach jeder Erneuerung neu zu laden.

TerminalCertbot
# Let's Encrypt mit Certbot
sudo certbot certonly --nginx -d ihre-domain.de -d www.ihre-domain.de

# Automatische Erneuerung prüfen
sudo certbot renew --dry-run

# Cron-Job (automatisch von Certbot eingerichtet)
# 0 */12 * * * /usr/bin/certbot renew --quiet

# Nginx nach Erneuerung neu laden
# --deploy-hook "systemctl reload nginx"
3Schritt 3 von 5

HSTS per Middleware und Hosting-Varianten

Setzen Sie den HSTS-Header per Middleware (SSR) oder auf der Hosting-Plattform. Beginnen Sie mit einem niedrigen max-age (z.B. 3600) und erhöhen Sie auf 2 Jahre (63072000), wenn alles funktioniert. preload nur setzen, wenn Sie die Domain in die HSTS-Preload-Liste eintragen moechten.

src/middleware.tsSSR
// src/middleware.ts -- HSTS per Middleware (SSR)
import { defineMiddleware } from 'astro:middleware';

export const onRequest = defineMiddleware(async (context, next) => {
  const response = await next();

  // HSTS: Browser soll nur HTTPS verwenden (2 Jahre)
  response.headers.set('Strict-Transport-Security',
    'max-age=63072000; includeSubDomains; preload');

  return response;
});
vercel.json / _headersHosting
// vercel.json -- TLS wird automatisch bereitgestellt
// Nur HSTS manuell setzen:
{
  "headers": [{
    "source": "/(.*)",
    "headers": [{
      "key": "Strict-Transport-Security",
      "value": "max-age=63072000; includeSubDomains; preload"
    }]
  }]
}

# public/_headers -- Netlify/Cloudflare Pages
# /*
#   Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
4Schritt 4 von 5

TLS verifizieren

Prüfen Sie Ihre TLS-Konfiguration mit SSL Labs und dem Wolf-Agents Web Security Check. Stellen Sie sicher, dass TLS 1.3 aktiv ist und der HSTS-Header korrekt gesetzt wird.

TerminalVerifizieren
# TLS-Version prüfen
openssl s_client -connect ihre-domain.de:443 -tls1_3 < /dev/null 2>&1 | grep "Protocol"
# Protocol  : TLSv1.3

# HSTS-Header prüfen
curl -sI https://ihre-domain.de | grep -i strict-transport
# Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

# SSL Labs: https://www.ssllabs.com/ssltest/analyze.html?d=ihre-domain.de
# Ziel: Note A oder A+
5Schritt 5 von 5

Hosting-Plattformen: Automatisches TLS

Bei Vercel und Netlify wird TLS automatisch bereitgestellt -- Sie müssen kein Zertifikat konfigurieren. Beide Plattformen verwenden TLS 1.3 und automatische Zertifikatserneuerung. Sie müssen nur den HSTS-Header setzen, um Downgrade-Angriffe zu verhindern.

Bei Cloudflare Pages wird TLS auf dem Edge-Server terminiert. Aktivieren Sie "Always Use HTTPS" und "Minimum TLS Version 1.2" in den Cloudflare-Einstellungen. HSTS können Sie entweder in den Cloudflare-Einstellungen oder im _headers-File setzen.

Bei Self-Hosted Astro (Hetzner, DigitalOcean, AWS EC2) konfigurieren Sie TLS selbst per Let's Encrypt und Nginx. Wolf-Agents nutzt diesen Ansatz mit dem @astrojs/node-Adapter hinter Nginx und automatischer Zertifikatserneuerung per Certbot. Der Nginx-Reverse-Proxy terminiert TLS und leitet HTTP-Anfragen an den Astro-Server weiter.

Häufige Fehler bei TLS in Astro

TLS in Astro konfigurieren

Astro hat keine TLS-Konfiguration. TLS wird immer auf dem Webserver oder der Hosting-Plattform konfiguriert. Der @astrojs/node-Adapter lauscht auf HTTP -- TLS-Terminierung erfolgt im Reverse Proxy.

Zertifikat nicht erneuert

Let's Encrypt-Zertifikate laufen nach 90 Tagen ab. Stellen Sie sicher, dass der Certbot-Cron-Job laeuft und Nginx nach jeder Erneuerung neu geladen wird. Testen Sie mit certbot renew --dry-run.

X-Forwarded-Proto fehlt

Ohne X-Forwarded-Proto: https im Reverse Proxy erkennt Astro die HTTPS-Verbindung nicht. Redirects und Links können dann auf HTTP statt HTTPS zeigen. Setzen Sie den Header in der Nginx-Konfiguration.

HSTS mit preload zu früh aktiviert

preload trägt Ihre Domain in die Browser-Preload-Liste ein -- das lässt sich nur schwer rückgängig machen. Testen Sie zuerst mit niedrigem max-age ohne preload und aktivieren Sie es erst, wenn HTTPS zuverlässig funktioniert.

Compliance-Relevanz

TLS-Verschlüsselung ist eine Grundanforderung von NIS2, PCI DSS 4.0 und der DSGVO. Ohne TLS ist keine sichere Datenübertragung möglich -- DSGVO Artikel 32 fordert Verschlüsselung als technische Maßnahme. PCI DSS 4.0 verlangt mindestens TLS 1.2 für die Übertragung von Karteninhaberdaten. Der Wolf-Agents Web Security Check bewertet TLS mit bis zu 4 Punkten -- inklusive Versionsprüfung und Zertifikatsdetails.

Wie steht Ihre Domain bei TLS und Zertifikate?

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