# 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`

