- Alle Markdown-Dateien (außer README.md) nach docs/ verschoben - Referenzen in README.md aktualisiert - /docs zu .dockerignore hinzugefügt
184 lines
5.0 KiB
Markdown
184 lines
5.0 KiB
Markdown
# Caddy Zertifikat-Troubleshooting
|
|
|
|
## Problem: Zertifikat für Punycode-Domain (hördle.de / xn--hrdle-jua.de) fehlt
|
|
|
|
Wenn die Domain `hördle.de` (xn--hrdle-jua.de) einen `ERR_SSL_PROTOCOL_ERROR` zeigt, bedeutet das, dass kein gültiges SSL-Zertifikat vorhanden ist.
|
|
|
|
### Schritt 1: Zertifikat-Status prüfen
|
|
|
|
Führe das Check-Script aus:
|
|
|
|
```bash
|
|
./scripts/check-caddy-certificates.sh
|
|
```
|
|
|
|
Dieses Script prüft:
|
|
- Ob Caddy läuft
|
|
- Welche Zertifikate vorhanden sind
|
|
- Ob die DNS-Einträge korrekt sind
|
|
- Ob die HTTPS-Verbindungen funktionieren
|
|
|
|
### Schritt 2: DNS-Einträge prüfen
|
|
|
|
**Wichtig**: Beide Domains müssen auf die gleiche Server-IP zeigen!
|
|
|
|
#### In GoDaddy prüfen:
|
|
|
|
1. Gehe zu [GoDaddy DNS-Verwaltung](https://dcc.godaddy.com/manage/hoerdle.de/dns)
|
|
2. Prüfe die A-Records:
|
|
|
|
**Für hoerdle.de:**
|
|
- Name: `@` oder `hoerdle.de`
|
|
- Typ: `A`
|
|
- Wert: `DEINE_SERVER_IP`
|
|
|
|
**Für hördle.de (Punycode):**
|
|
- Name: `@` oder `xn--hrdle-jua.de` (oder der Unicode-Name, falls unterstützt)
|
|
- Typ: `A`
|
|
- Wert: **GLEICHE_SERVER_IP wie hoerdle.de**
|
|
|
|
#### DNS manuell testen:
|
|
|
|
```bash
|
|
# Prüfe hoerdle.de
|
|
dig +short hoerdle.de @8.8.8.8
|
|
|
|
# Prüfe xn--hrdle-jua.de (Punycode)
|
|
dig +short xn--hrdle-jua.de @8.8.8.8
|
|
|
|
# Beide sollten die gleiche IP zurückgeben!
|
|
```
|
|
|
|
### Schritt 3: Zertifikat neu erstellen
|
|
|
|
Wenn die DNS-Einträge korrekt sind, lösche das alte (fehlgeschlagene) Zertifikat und lass Caddy es neu erstellen:
|
|
|
|
```bash
|
|
./scripts/renew-caddy-certificates.sh
|
|
```
|
|
|
|
Wähle Option 2: "Nur Zertifikat für xn--hrdle-jua.de löschen"
|
|
|
|
### Schritt 4: Caddy-Logs überwachen
|
|
|
|
Während Caddy das Zertifikat erstellt, überwache die Logs:
|
|
|
|
```bash
|
|
docker logs hoerdle-caddy -f
|
|
```
|
|
|
|
Du solltest sehen:
|
|
- `[INFO] attempting ACME challenge` - Caddy versucht die Challenge
|
|
- `[INFO] successfully completed ACME challenge` - Challenge erfolgreich
|
|
- `[INFO] certificate obtained successfully` - Zertifikat erstellt
|
|
|
|
Bei Fehlern siehst du:
|
|
- `[ERROR] acme: error` - Challenge fehlgeschlagen
|
|
- `[ERROR] unable to validate` - Validierung fehlgeschlagen
|
|
|
|
### Schritt 5: Häufige Probleme und Lösungen
|
|
|
|
#### Problem 1: DNS zeigt auf falsche IP
|
|
|
|
**Symptom**: `dig` zeigt eine andere IP als erwartet
|
|
|
|
**Lösung**:
|
|
1. Prüfe DNS-Einträge in GoDaddy
|
|
2. Warte auf DNS-Propagierung (kann 5-60 Minuten dauern)
|
|
3. Verwende einen DNS-Checker: https://www.whatsmydns.net/
|
|
|
|
#### Problem 2: Port 80 nicht erreichbar
|
|
|
|
**Symptom**: Caddy-Logs zeigen "connection refused" oder Timeout
|
|
|
|
**Lösung**:
|
|
1. Prüfe Firewall: `sudo ufw status`
|
|
2. Prüfe ob Port 80 offen ist: `sudo netstat -tulpn | grep :80`
|
|
3. Prüfe ob Caddy auf Port 80 lauscht: `docker exec hoerdle-caddy netstat -tulpn | grep :80`
|
|
|
|
#### Problem 3: Let's Encrypt Rate Limit
|
|
|
|
**Symptom**: Logs zeigen "too many certificates already issued"
|
|
|
|
**Lösung**:
|
|
- Warte 1 Woche (Rate Limit von Let's Encrypt)
|
|
- Oder verwende Staging-Environment zum Testen:
|
|
```caddyfile
|
|
tls {
|
|
staging
|
|
}
|
|
```
|
|
|
|
#### Problem 4: Punycode-Domain wird nicht erkannt
|
|
|
|
**Symptom**: Caddy erstellt Zertifikat nur für hoerdle.de, nicht für xn--hrdle-jua.de
|
|
|
|
**Lösung**:
|
|
1. Prüfe ob beide Domains in der Caddyfile stehen
|
|
2. Prüfe DNS-Einträge (siehe Schritt 2)
|
|
3. Erzwinge Zertifikat-Erstellung (siehe Schritt 3)
|
|
|
|
### Manuelle Zertifikat-Löschung
|
|
|
|
Falls das Script nicht funktioniert, kannst du Zertifikate manuell löschen:
|
|
|
|
```bash
|
|
# Alle Zertifikate löschen
|
|
docker exec hoerdle-caddy rm -rf /data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/*
|
|
|
|
# Nur Punycode-Zertifikat löschen (manuell)
|
|
docker exec hoerdle-caddy find /data/caddy/certificates -name "*xn--*" -delete
|
|
|
|
# Container neu starten
|
|
docker compose -f docker-compose.caddy.yml --profile production restart caddy
|
|
```
|
|
|
|
### DNS-Propagierung prüfen
|
|
|
|
Nach DNS-Änderungen kann es bis zu 60 Minuten dauern, bis alle DNS-Server aktualisiert sind:
|
|
|
|
```bash
|
|
# Prüfe DNS-Propagierung weltweit
|
|
curl "https://dnschecker.org/#A/hoerdle.de"
|
|
curl "https://dnschecker.org/#A/xn--hrdle-jua.de"
|
|
```
|
|
|
|
### Test-Zertifikat erstellen (Staging)
|
|
|
|
Zum Testen ohne Rate-Limits kannst du ein Staging-Zertifikat erstellen:
|
|
|
|
1. Temporär Caddyfile ändern (in beiden Domain-Blocks):
|
|
```caddyfile
|
|
tls {
|
|
staging
|
|
}
|
|
```
|
|
|
|
2. Container neu starten
|
|
3. Zertifikat erstellen lassen
|
|
4. Zurück zu Produktion ändern (Staging-Block entfernen)
|
|
5. Erneut Container neu starten
|
|
|
|
### Verifizieren, dass es funktioniert
|
|
|
|
Nach erfolgreicher Zertifikats-Erstellung:
|
|
|
|
```bash
|
|
# Teste HTTPS-Verbindung
|
|
curl -I https://hoerdle.de
|
|
curl -I https://xn--hrdle-jua.de
|
|
|
|
# Prüfe Zertifikat-Details
|
|
echo | openssl s_client -connect hoerdle.de:443 -servername hoerdle.de 2>/dev/null | openssl x509 -noout -subject -dates
|
|
echo | openssl s_client -connect xn--hrdle-jua.de:443 -servername xn--hrdle-jua.de 2>/dev/null | openssl x509 -noout -subject -dates
|
|
```
|
|
|
|
### Support
|
|
|
|
Falls das Problem weiterhin besteht:
|
|
1. Prüfe Caddy-Logs: `docker logs hoerdle-caddy`
|
|
2. Prüfe DNS: `dig +short xn--hrdle-jua.de @8.8.8.8`
|
|
3. Prüfe Firewall: `sudo ufw status`
|
|
4. Prüfe Port-Zugriff: `curl -I http://hoerdle.de`
|
|
|