# SSL-Zertifikate erneuern (Let's Encrypt / Certbot)

Server: `webserver` (`142.132.206.12`)  
Letzte erfolgreiche Erneuerung: **11.07.2026** (gültig bis **11.10.2026**)

---

## Symptome: Zertifikat abgelaufen

- Browser-Warnung: „Verbindung ist nicht privat“ / `NET::ERR_CERT_DATE_INVALID`
- HTTPS-Seiten laden nicht oder zeigen ein abgelaufenes Zertifikat
- Apache startet ggf. mit Fehler, wenn Zertifikatspfade ungültig sind

---

## Ablaufdatum prüfen

```bash
sudo certbot certificates
```

Oder einzelne Domain:

```bash
sudo openssl x509 -in /etc/letsencrypt/live/dulcopool.dp-smartsolutions.de/fullchain.pem -noout -dates
sudo openssl x509 -in /etc/letsencrypt/live/dp-smartsolutions.de-0001/fullchain.pem -noout -dates
```

---

## Erneuerung: Subdomain Dulcopool

```bash
sudo certbot --apache -d dulcopool.dp-smartsolutions.de
```

**Wenn Certbot fragt** („Certificate not yet due for renewal“), aber das Zertifikat im Browser trotzdem abgelaufen wirkt:

- **Option 2 wählen:** `Renew & replace the certificate`

Erfolgreiche Ausgabe (Beispiel 11.07.2026):

```
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/dulcopool.dp-smartsolutions.de/fullchain.pem
This certificate expires on 2026-10-11.
Successfully deployed certificate for dulcopool.dp-smartsolutions.de to
  /etc/apache2/sites-enabled/dulcopool-proxy-le-ssl.conf
```

Danach Apache prüfen:

```bash
sudo apache2ctl configtest
sudo systemctl reload apache2
```

**Proxy im HTTPS-Block prüfen** (`dulcopool-proxy-le-ssl.conf`):

```apache
ProxyPass        / http://192.168.55.5:8787/
ProxyPassReverse / http://192.168.55.5:8787/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
```

---

## Erneuerung: Hauptdomain

```bash
sudo certbot --apache -d dp-smartsolutions.de
```

Erfolgreiche Ausgabe (Beispiel 11.07.2026):

```
Certificate is saved at: /etc/letsencrypt/live/dp-smartsolutions.de-0001/fullchain.pem
This certificate expires on 2026-10-11.
Successfully deployed certificate for dp-smartsolutions.de to
  /etc/apache2/sites-enabled/000-default-le-ssl.conf
```

```bash
sudo apache2ctl configtest
sudo systemctl reload apache2
```

---

## Erneuerung: Subdomain Bayrol (falls nötig)

```bash
sudo certbot --apache -d bayrol.dp-smartsolutions.de
```

Proxy-Ziel: `http://192.168.55.6:8787/`

---

## Automatische Erneuerung testen

Certbot richtet einen Cron/Timer ein. Testlauf ohne echte Änderung:

```bash
sudo certbot renew --dry-run
```

---

## Erst-Einrichtung (neue Subdomain, noch kein Zertifikat)

**Wichtig:** Zuerst nur HTTP (`:80`), **ohne** `SSLCertificateFile`-Zeilen. Sonst schlägt `apache2ctl configtest` fehl, bevor Certbot laufen kann.

Beispiel-Configs im Projekt:

- `config/apache/dulcopool-proxy.conf.example`
- `config/apache/bayrol-proxy.conf.example`

Ablauf:

1. Config mit nur `<VirtualHost *:80>` aktivieren
2. `sudo a2enmod proxy proxy_http ssl headers`
3. `sudo a2ensite …-proxy.conf`
4. `sudo apache2ctl configtest && sudo systemctl reload apache2`
5. `sudo certbot --apache -d DEINE-SUBDOMAIN.dp-smartsolutions.de`
6. ProxyPass-Zeilen im neuen `:443`-Block von Certbot ergänzen/prüfen

---

## Bekannte Apache-Probleme

| Problem | Lösung |
|--------|--------|
| `SSLCertificateFile ... does not exist` | `:443`-Block entfernen, erst HTTP + Certbot |
| Certbot: Port 80 nicht erreichbar | Firewall/DNS prüfen, Apache auf `:80` lauschen lassen |
| Seite lädt, Gerät (8787) kaputt | `ProxyPass` + `X-Forwarded-Proto`/`Port` im `:443`-Block |
| Certbot sagt „not due“, Browser zeigt abgelaufen | Option **2** (Renew & replace) |

---

## Nach der Erneuerung testen

```bash
curl -I https://dp-smartsolutions.de
curl -I https://dulcopool.dp-smartsolutions.de
curl -I https://bayrol.dp-smartsolutions.de
```

Im Browser: Schloss-Symbol → Zertifikat gültig bis angezeigt.
