Ihre App auf Fly.io deployed und die Root-Domain funktioniert einwandfrei, aber www.ihreseite.com wirft einen SSL-Handshake-Fehler? Sie sind nicht allein. Dieser Error 525 passiert, weil Fly.io separate SSL-Zertifikate fuer jeden Hostnamen benoetigt - und die meisten Deployment-Guides ueberspringen diesen Schritt komplett.
Hier ist die Loesung, getestet und verifiziert bei einem Produktions-Deployment.
Das Problem
Sie haben auf Fly.io deployed, Ihre Custom Domain hinzugefuegt, und alles sieht gut aus. Dann versuchen Sie www.ihreseite.com zu besuchen und bekommen:
Error 525: SSL handshake failedInzwischen funktioniert ihreseite.com (ohne www) einwandfrei. Was ist los?
Warum das passiert
Fly.io verwendet Let's Encrypt, um SSL-Zertifikate auszustellen, aber hier ist der Haken: Ein Zertifikat fuer example.com hinzuzufuegen deckt NICHT automatisch www.example.com ab.
Sie werden als komplett separate Hostnamen behandelt. Sie muessen explizit ein Zertifikat fuer die www-Subdomain hinzufuegen.
Die Loesung (5 Schritte)
Schritt 1: Fly.io CLI installieren
Falls noch nicht geschehen, installieren Sie flyctl:
# flyctl installieren
curl -L https://fly.io/install.sh | sh
# Zum PATH hinzufuegen
export FLYCTL_INSTALL="$HOME/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"
# Dauerhaft machen (zu ~/.bashrc oder ~/.zshrc hinzufuegen)
echo 'export FLYCTL_INSTALL="$HOME/.fly"' >> ~/.bashrc
echo 'export PATH="$FLYCTL_INSTALL/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# Verifizieren, dass es funktioniert
flyctl versionSchritt 2: Aktuelle Zertifikate pruefen
Zuerst sehen Sie, welche Zertifikate Sie bereits haben:
flyctl certs list -a IHR_APP_NAMESie werden wahrscheinlich so etwas sehen:
Host Name Added Status
example.com 1 month ago Ready
api.example.com 1 month ago ReadyBemerken Sie, was fehlt? Die www-Subdomain.
Schritt 3: Das www-Zertifikat hinzufuegen (Das behebt es)
Hier ist der kritische Befehl, der das Problem loest:
flyctl certs add www.example.com -a IHR_APP_NAMEFly.io wird automatisch ein Let's Encrypt SSL-Zertifikat fuer Ihre www-Subdomain ausstellen.
Schritt 4: Verifizieren, dass das Zertifikat bereit ist
Warten Sie 1-2 Minuten, dann pruefen Sie den Zertifikatsstatus:
flyctl certs show www.example.com -a IHR_APP_NAMESuchen Sie nach "Status: Ready". Wenn es "Awaiting certificates" sagt, warten Sie noch eine Minute und pruefen Sie erneut.
Schritt 5: Cloudflare SSL/TLS-Modus konfigurieren
Dieser Schritt ist kritisch, wenn Sie Cloudflare fuer DNS verwenden (was Sie sollten).
- Melden Sie sich in Ihrem Cloudflare-Dashboard an
- Waehlen Sie Ihre Domain
- Gehen Sie zu SSL/TLS -> Overview
- Setzen Sie den Verschluesselungsmodus auf "Full" (nicht "Flexible" oder "Full (strict)")
Warum "Full"?
- Flexible: Cloudflare nutzt HTTPS zu Ihren Besuchern, aber HTTP zu Fly.io (unsicher, verursacht Probleme)
- Full: Cloudflare nutzt HTTPS sowohl zu Besuchern als auch zu Fly.io (korrekt)
- Full (strict): Erfordert eine vertrauenswuerdige Zertifizierungsstelle, aber Fly.io verwaltet eigene Zertifikate (verursacht Fehler)
Alles testen
Verifizieren Sie, dass beide Domains funktionieren:
# Root-Domain testen
curl -I https://example.com
# www-Subdomain testen
curl -I https://www.example.comBeide sollten HTTP/2 200 (oder HTTP/1.1 200) zurueckgeben.
Fazit
Das Fly.io www-Subdomain-SSL-Problem ist eines dieser "Gotchas", die selbst erfahrene Entwickler erwischen. Die Loesung ist einfach, sobald Sie sie kennen:
- Ein separates Zertifikat fuer www hinzufuegen:
flyctl certs add www.example.com -a IHR_APP_NAME - Cloudflare SSL/TLS auf "Full"-Modus setzen
- 1-2 Minuten warten, bis das Zertifikat bereit ist
- Beide Domains testen
Das ist alles. Keine komplexe Konfiguration, keine Server-Neustarts, keine Config-Dateien bearbeiten. Nur ein Befehl, den die meisten Deployment-Guides vergessen zu erwaehnen.
Verwandte Guides:
Fred
AUTHORFull-stack developer with 10+ years building production applications. I've been deploying to Cloudflare's edge network since Workers launched in 2017.
Need a developer who gets it?
POC builds, vibe-coded fixes, and real engineering. Let's talk.
Hire Me →
