# SSL/TLS Setup für YourPart Daemon

Dieses Dokument beschreibt, wie Sie SSL/TLS-Zertifikate für den YourPart Daemon einrichten können.

## 🚀 Schnellstart

### 1. Self-Signed Certificate (Entwicklung/Testing)
```bash
./setup-ssl.sh
# Wählen Sie Option 1
```

### 2. Let's Encrypt Certificate (Produktion)
```bash
./setup-ssl.sh
# Wählen Sie Option 2
```

### 3. Apache2-Zertifikate verwenden (empfohlen für Ubuntu)
```bash
./setup-ssl.sh
# Wählen Sie Option 4
# Verwendet bereits vorhandene Apache2-Zertifikate
# ⚠️ Warnung bei Snakeoil-Zertifikaten (nur für localhost)
```

### 4. DNS-01 Challenge (für komplexe Setups)
```bash
./setup-ssl-dns.sh
# Für Cloudflare, Route53, etc.
```

## 📋 Voraussetzungen

### Für Apache2-Zertifikate:
- Apache2 installiert oder Zertifikate in Standard-Pfaden
- Unterstützte Pfade (priorisiert nach Qualität):
  - `/etc/letsencrypt/live/your-part.de/fullchain.pem` (Let's Encrypt - empfohlen)
  - `/etc/letsencrypt/live/$(hostname)/fullchain.pem` (Let's Encrypt)
  - `/etc/apache2/ssl/apache.crt` (Custom Apache2)
  - `/etc/ssl/certs/ssl-cert-snakeoil.pem` (Ubuntu Standard - nur localhost)

### Für Let's Encrypt (HTTP-01 Challenge):
- Port 80 muss verfügbar sein
- Domain `your-part.de` muss auf den Server zeigen
- Kein anderer Service auf Port 80

### Für DNS-01 Challenge:
- DNS-Provider Account (Cloudflare, Route53, etc.)
- API-Credentials für DNS-Management

## 🔧 Konfiguration

Nach der Zertifikats-Erstellung:

1. **SSL in der Konfiguration aktivieren:**
   ```ini
   # /etc/yourpart/daemon.conf
   WEBSOCKET_SSL_ENABLED=true
   WEBSOCKET_SSL_CERT_PATH=/etc/yourpart/server.crt
   WEBSOCKET_SSL_KEY_PATH=/etc/yourpart/server.key
   ```

2. **Daemon neu starten:**
   ```bash
   sudo systemctl restart yourpart-daemon
   ```

3. **Verbindung testen:**
   ```bash
   # WebSocket Secure
   wss://your-part.de:4551
   
   # Oder ohne SSL
   ws://your-part.de:4551
   ```

## 🔄 Automatische Erneuerung

### Let's Encrypt-Zertifikate:
- **Cron Job:** Täglich um 2:30 Uhr
- **Script:** `/etc/yourpart/renew-ssl.sh`
- **Log:** `/var/log/yourpart/ssl-renewal.log`

### Apache2-Zertifikate:
- **Ubuntu Snakeoil:** Automatisch von Apache2 verwaltet
- **Let's Encrypt:** Automatische Erneuerung wenn erkannt
- **Custom:** Manuelle Verwaltung erforderlich

## 📁 Dateistruktur

```
/etc/yourpart/
├── server.crt          # Zertifikat (Symlink zu Let's Encrypt)
├── server.key          # Private Key (Symlink zu Let's Encrypt)
├── renew-ssl.sh        # Auto-Renewal Script
└── cloudflare.ini      # Cloudflare Credentials (falls verwendet)

/etc/letsencrypt/live/your-part.de/
├── fullchain.pem       # Vollständige Zertifikatskette
├── privkey.pem         # Private Key
├── cert.pem            # Zertifikat
└── chain.pem           # Intermediate Certificate
```

## 🛠️ Troubleshooting

### Zertifikat wird nicht akzeptiert
```bash
# Prüfe Zertifikats-Gültigkeit
openssl x509 -in /etc/yourpart/server.crt -text -noout

# Prüfe Berechtigungen
ls -la /etc/yourpart/server.*
```

### Let's Encrypt Challenge fehlgeschlagen
```bash
# Prüfe Port 80
sudo netstat -tlnp | grep :80

# Prüfe DNS
nslookup your-part.de

# Prüfe Firewall
sudo ufw status
```

### Auto-Renewal funktioniert nicht
```bash
# Prüfe Cron Jobs
sudo crontab -l

# Teste Renewal Script
sudo /etc/yourpart/renew-ssl.sh

# Prüfe Logs
tail -f /var/log/yourpart/ssl-renewal.log
```

## 🔒 Sicherheit

### Berechtigungen
- **Zertifikat:** `644` (readable by all, writable by owner)
- **Private Key:** `600` (readable/writable by owner only)
- **Owner:** `yourpart:yourpart`

### Firewall
```bash
# Öffne Port 80 für Let's Encrypt Challenge
sudo ufw allow 80/tcp

# Öffne Port 4551 für WebSocket
sudo ufw allow 4551/tcp
```

## 📚 Weitere Informationen

- [Let's Encrypt Dokumentation](https://letsencrypt.org/docs/)
- [Certbot Dokumentation](https://certbot.eff.org/docs/)
- [libwebsockets SSL](https://libwebsockets.org/lws-api-doc-master/html/group__ssl.html)

## 🆘 Support

Bei Problemen:
1. Prüfen Sie die Logs: `sudo journalctl -u yourpart-daemon -f`
2. Testen Sie die Zertifikate: `openssl s_client -connect your-part.de:4551`
3. Prüfen Sie die Firewall: `sudo ufw status`
