diff --git a/SSL-SETUP.md b/SSL-SETUP.md new file mode 100644 index 0000000..a03f5e8 --- /dev/null +++ b/SSL-SETUP.md @@ -0,0 +1,147 @@ +# 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. DNS-01 Challenge (für komplexe Setups) +```bash +./setup-ssl-dns.sh +# Für Cloudflare, Route53, etc. +``` + +## 📋 Voraussetzungen + +### 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 werden automatisch erneuert: +- **Cron Job:** Täglich um 2:30 Uhr +- **Script:** `/etc/yourpart/renew-ssl.sh` +- **Log:** `/var/log/yourpart/ssl-renewal.log` + +## 📁 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` diff --git a/setup-ssl-dns.sh b/setup-ssl-dns.sh new file mode 100755 index 0000000..653aec3 --- /dev/null +++ b/setup-ssl-dns.sh @@ -0,0 +1,236 @@ +#!/bin/bash + +# SSL/TLS Setup Script für YourPart Daemon mit DNS-01 Challenge +# Für Domains mit DNS-Provider wie Cloudflare, Route53, etc. + +set -e + +# Farben für Logging +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +CERT_DIR="/etc/yourpart" +CERT_FILE="$CERT_DIR/server.crt" +KEY_FILE="$CERT_DIR/server.key" +LETSENCRYPT_CERT="/etc/letsencrypt/live/your-part.de/fullchain.pem" +LETSENCRYPT_KEY="/etc/letsencrypt/live/your-part.de/privkey.pem" + +log_info "SSL/TLS Setup mit DNS-01 Challenge für YourPart Daemon" + +# Prüfe ob certbot installiert ist +if ! command -v certbot &> /dev/null; then + log_error "Certbot ist nicht installiert!" + log_info "Installiere Certbot..." + if command -v apt &> /dev/null; then + sudo apt update + sudo apt install -y certbot + elif command -v zypper &> /dev/null; then + sudo zypper install -y certbot + else + log_error "Paketmanager nicht unterstützt. Installiere Certbot manuell." + exit 1 + fi +fi + +# DNS Provider Auswahl +echo "" +log_info "Wählen Sie Ihren DNS-Provider:" +echo "1) Cloudflare" +echo "2) Route53 (AWS)" +echo "3) Manual (manuelle DNS-Einträge)" +echo "" +read -p "Ihre Wahl (1-3): " -n 1 -r +echo "" + +case $REPLY in + 1) + DNS_PROVIDER="cloudflare" + ;; + 2) + DNS_PROVIDER="route53" + ;; + 3) + DNS_PROVIDER="manual" + ;; + *) + log_error "Ungültige Auswahl!" + exit 1 + ;; +esac + +# Erstelle Zertifikats-Verzeichnis +if [ ! -d "$CERT_DIR" ]; then + log_info "Erstelle Zertifikats-Verzeichnis: $CERT_DIR" + sudo mkdir -p "$CERT_DIR" +fi + +# DNS-Provider spezifische Konfiguration +case $DNS_PROVIDER in + "cloudflare") + log_info "Cloudflare DNS-01 Challenge Setup" + + # Prüfe ob Cloudflare Plugin installiert ist + if ! certbot plugins | grep -q cloudflare; then + log_info "Installiere Cloudflare Plugin..." + if command -v apt &> /dev/null; then + sudo apt install -y python3-certbot-dns-cloudflare + elif command -v zypper &> /dev/null; then + sudo zypper install -y python3-certbot-dns-cloudflare + else + log_error "Cloudflare Plugin nicht verfügbar. Installiere manuell." + exit 1 + fi + fi + + # Erstelle Cloudflare Credentials Datei + log_info "Erstelle Cloudflare Credentials..." + read -p "Cloudflare API Token: " -s CF_TOKEN + echo + + CF_CREDENTIALS_FILE="/etc/yourpart/cloudflare.ini" + sudo tee "$CF_CREDENTIALS_FILE" > /dev/null << EOF +dns_cloudflare_api_token = $CF_TOKEN +EOF + sudo chmod 600 "$CF_CREDENTIALS_FILE" + + # Erstelle Zertifikat + log_info "Erstelle Let's Encrypt Zertifikat mit Cloudflare DNS-01 Challenge..." + sudo certbot certonly \ + --dns-cloudflare \ + --dns-cloudflare-credentials "$CF_CREDENTIALS_FILE" \ + -d your-part.de \ + --non-interactive \ + --agree-tos \ + --email admin@your-part.de + ;; + + "route53") + log_info "Route53 DNS-01 Challenge Setup" + + # Prüfe ob Route53 Plugin installiert ist + if ! certbot plugins | grep -q route53; then + log_info "Installiere Route53 Plugin..." + if command -v apt &> /dev/null; then + sudo apt install -y python3-certbot-dns-route53 + elif command -v zypper &> /dev/null; then + sudo zypper install -y python3-certbot-dns-route53 + else + log_error "Route53 Plugin nicht verfügbar. Installiere manuell." + exit 1 + fi + fi + + # Erstelle Zertifikat + log_info "Erstelle Let's Encrypt Zertifikat mit Route53 DNS-01 Challenge..." + log_warning "Stelle sicher, dass AWS-Credentials konfiguriert sind!" + sudo certbot certonly \ + --dns-route53 \ + -d your-part.de \ + --non-interactive \ + --agree-tos \ + --email admin@your-part.de + ;; + + "manual") + log_info "Manuelle DNS-01 Challenge" + log_warning "Sie müssen die DNS-TXT-Einträge manuell erstellen!" + + # Erstelle Zertifikat mit manueller Bestätigung + sudo certbot certonly \ + --manual \ + --preferred-challenges dns \ + -d your-part.de \ + --agree-tos \ + --email admin@your-part.de + ;; +esac + +if [ $? -eq 0 ]; then + log_success "Let's Encrypt Zertifikat erfolgreich erstellt!" + + # Erstelle Symlinks zu den Zertifikaten + sudo ln -sf "$LETSENCRYPT_CERT" "$CERT_FILE" + sudo ln -sf "$LETSENCRYPT_KEY" "$KEY_FILE" + + # Setze korrekte Berechtigungen + sudo chown yourpart:yourpart "$CERT_FILE" "$KEY_FILE" + sudo chmod 644 "$CERT_FILE" + sudo chmod 600 "$KEY_FILE" + + # Zeige Zertifikats-Informationen + log_info "Let's Encrypt Zertifikats-Informationen:" + openssl x509 -in "$CERT_FILE" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" + + # Erstelle Auto-Renewal Script + log_info "Richte automatische Zertifikats-Erneuerung ein..." + + RENEWAL_SCRIPT="/etc/yourpart/renew-ssl-dns.sh" + sudo tee "$RENEWAL_SCRIPT" > /dev/null << EOF +#!/bin/bash +# Automatische SSL-Zertifikats-Erneuerung für YourPart Daemon (DNS-01) + +CERT_DIR="/etc/yourpart" +LETSENCRYPT_CERT="/etc/letsencrypt/live/your-part.de/fullchain.pem" +LETSENCRYPT_KEY="/etc/letsencrypt/live/your-part.de/privkey.pem" + +# Erneuere Zertifikat +certbot renew --quiet + +if [ \$? -eq 0 ]; then + # Aktualisiere Symlinks + ln -sf "\$LETSENCRYPT_CERT" "\$CERT_DIR/server.crt" + ln -sf "\$LETSENCRYPT_KEY" "\$CERT_DIR/server.key" + + # Setze Berechtigungen + chown yourpart:yourpart "\$CERT_DIR/server.crt" "\$CERT_DIR/server.key" + chmod 644 "\$CERT_DIR/server.crt" + chmod 600 "\$CERT_DIR/server.key" + + # Starte Daemon neu + systemctl reload yourpart-daemon + + echo "\$(date): SSL-Zertifikat erfolgreich erneuert" >> /var/log/yourpart/ssl-renewal.log +fi +EOF + + sudo chmod +x "$RENEWAL_SCRIPT" + + # Füge Cron Job hinzu (täglich um 2:30 Uhr) + (sudo crontab -l 2>/dev/null; echo "30 2 * * * $RENEWAL_SCRIPT") | sudo crontab - + + log_success "Automatische Erneuerung eingerichtet (täglich um 2:30 Uhr)" + + log_info "" + log_info "Nächste Schritte:" + log_info "1. Aktiviere SSL in der Konfiguration:" + log_info " WEBSOCKET_SSL_ENABLED=true" + log_info "2. Starte den Daemon neu:" + log_info " sudo systemctl restart yourpart-daemon" + log_info "3. Verbinde dich mit:" + log_info " wss://your-part.de:4551" + log_info "" + log_success "Let's Encrypt Zertifikat ist produktionsbereit!" + +else + log_error "Let's Encrypt Zertifikat konnte nicht erstellt werden!" + exit 1 +fi diff --git a/setup-ssl.sh b/setup-ssl.sh index 5b74dc6..31f2ad8 100755 --- a/setup-ssl.sh +++ b/setup-ssl.sh @@ -2,6 +2,7 @@ # SSL/TLS Setup Script für YourPart Daemon # Erstellt oder verwaltet SSL-Zertifikate für WebSocket Secure (WSS) +# Unterstützt Self-Signed Certificates und Let's Encrypt set -e @@ -33,67 +34,253 @@ CERT_FILE="$CERT_DIR/server.crt" KEY_FILE="$CERT_DIR/server.key" CSR_FILE="$CERT_DIR/server.csr" +# Let's Encrypt Verzeichnisse +LETSENCRYPT_DIR="/etc/letsencrypt/live" +LETSENCRYPT_CERT="$LETSENCRYPT_DIR/your-part.de/fullchain.pem" +LETSENCRYPT_KEY="$LETSENCRYPT_DIR/your-part.de/privkey.pem" + # Prüfe ob OpenSSL installiert ist if ! command -v openssl &> /dev/null; then log_error "OpenSSL ist nicht installiert!" exit 1 fi +# Funktionen +setup_letsencrypt() { + log_info "Let's Encrypt Setup für your-part.de" + + # Prüfe ob certbot installiert ist + if ! command -v certbot &> /dev/null; then + log_error "Certbot ist nicht installiert!" + log_info "Installiere Certbot..." + if command -v apt &> /dev/null; then + sudo apt update + sudo apt install -y certbot + elif command -v zypper &> /dev/null; then + sudo zypper install -y certbot + else + log_error "Paketmanager nicht unterstützt. Installiere Certbot manuell." + exit 1 + fi + fi + + # Prüfe ob Let's Encrypt Zertifikate bereits existieren + if [ -f "$LETSENCRYPT_CERT" ] && [ -f "$LETSENCRYPT_KEY" ]; then + log_info "Let's Encrypt Zertifikate existieren bereits" + + # Prüfe Gültigkeit + if openssl x509 -in "$LETSENCRYPT_CERT" -text -noout &> /dev/null; then + log_success "Let's Encrypt Zertifikat ist gültig" + + # Zeige Zertifikats-Informationen + log_info "Let's Encrypt Zertifikats-Informationen:" + openssl x509 -in "$LETSENCRYPT_CERT" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" + + read -p "Möchten Sie die Zertifikate erneuern? (y/N): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_info "Zertifikate bleiben unverändert" + return 0 + fi + else + log_warning "Let's Encrypt Zertifikat ist ungültig, erstelle neue..." + fi + fi + + # Erstelle oder erneuere Let's Encrypt Zertifikat + log_info "Erstelle/erneuere Let's Encrypt Zertifikat für your-part.de..." + + # Prüfe ob Port 80 verfügbar ist (für HTTP-01 Challenge) + if ! sudo netstat -tlnp | grep -q ":80 "; then + log_warning "Port 80 ist nicht verfügbar. Stelle sicher, dass kein anderer Service läuft." + log_info "Oder verwende DNS-01 Challenge mit --dns-cloudflare oder ähnlich" + fi + + # Erstelle Zertifikat mit HTTP-01 Challenge + sudo certbot certonly --standalone -d your-part.de --non-interactive --agree-tos --email admin@your-part.de + + if [ $? -eq 0 ]; then + log_success "Let's Encrypt Zertifikat erfolgreich erstellt!" + + # Erstelle Symlinks zu den Zertifikaten + sudo ln -sf "$LETSENCRYPT_CERT" "$CERT_FILE" + sudo ln -sf "$LETSENCRYPT_KEY" "$KEY_FILE" + + # Setze korrekte Berechtigungen + sudo chown yourpart:yourpart "$CERT_FILE" "$KEY_FILE" + sudo chmod 644 "$CERT_FILE" + sudo chmod 600 "$KEY_FILE" + + # Zeige Zertifikats-Informationen + log_info "Let's Encrypt Zertifikats-Informationen:" + openssl x509 -in "$CERT_FILE" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" + + # Erstelle Auto-Renewal Cron Job + setup_auto_renewal + + else + log_error "Let's Encrypt Zertifikat konnte nicht erstellt werden!" + exit 1 + fi +} + +setup_auto_renewal() { + log_info "Richte automatische Zertifikats-Erneuerung ein..." + + # Erstelle Renewal Script + sudo tee /etc/yourpart/renew-ssl.sh > /dev/null << 'EOF' +#!/bin/bash +# Automatische SSL-Zertifikats-Erneuerung für YourPart Daemon + +CERT_DIR="/etc/yourpart" +LETSENCRYPT_CERT="/etc/letsencrypt/live/your-part.de/fullchain.pem" +LETSENCRYPT_KEY="/etc/letsencrypt/live/your-part.de/privkey.pem" + +# Erneuere Zertifikat +certbot renew --quiet + +if [ $? -eq 0 ]; then + # Aktualisiere Symlinks + ln -sf "$LETSENCRYPT_CERT" "$CERT_DIR/server.crt" + ln -sf "$LETSENCRYPT_KEY" "$CERT_DIR/server.key" + + # Setze Berechtigungen + chown yourpart:yourpart "$CERT_DIR/server.crt" "$CERT_DIR/server.key" + chmod 644 "$CERT_DIR/server.crt" + chmod 600 "$CERT_DIR/server.key" + + # Starte Daemon neu + systemctl reload yourpart-daemon + + echo "$(date): SSL-Zertifikat erfolgreich erneuert" >> /var/log/yourpart/ssl-renewal.log +fi +EOF + + sudo chmod +x /etc/yourpart/renew-ssl.sh + + # Füge Cron Job hinzu (täglich um 2:30 Uhr) + (sudo crontab -l 2>/dev/null; echo "30 2 * * * /etc/yourpart/renew-ssl.sh") | sudo crontab - + + log_success "Automatische Erneuerung eingerichtet (täglich um 2:30 Uhr)" +} + log_info "SSL/TLS Setup für YourPart Daemon" +# Benutzerauswahl +echo "" +log_info "Wählen Sie den Zertifikatstyp:" +echo "1) Self-Signed Certificate (für Entwicklung/Testing)" +echo "2) Let's Encrypt Certificate (für Produktion)" +echo "3) Bestehende Let's Encrypt Zertifikate verwenden" +echo "" +read -p "Ihre Wahl (1-3): " -n 1 -r +echo "" + +case $REPLY in + 1) + log_info "Self-Signed Certificate wird erstellt..." + CERT_TYPE="self-signed" + ;; + 2) + log_info "Let's Encrypt Certificate wird erstellt..." + CERT_TYPE="letsencrypt" + ;; + 3) + log_info "Bestehende Let's Encrypt Zertifikate werden verwendet..." + CERT_TYPE="existing-letsencrypt" + ;; + *) + log_error "Ungültige Auswahl!" + exit 1 + ;; +esac + # Erstelle Zertifikats-Verzeichnis falls nicht vorhanden if [ ! -d "$CERT_DIR" ]; then log_info "Erstelle Zertifikats-Verzeichnis: $CERT_DIR" sudo mkdir -p "$CERT_DIR" fi -# Prüfe ob bereits Zertifikate existieren -if [ -f "$CERT_FILE" ] && [ -f "$KEY_FILE" ]; then - log_info "Zertifikate existieren bereits" - - # Prüfe Gültigkeit der Zertifikate - if openssl x509 -in "$CERT_FILE" -text -noout &> /dev/null; then - log_success "Zertifikat ist gültig" - - # Zeige Zertifikats-Informationen - log_info "Zertifikats-Informationen:" - openssl x509 -in "$CERT_FILE" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" - - read -p "Möchten Sie neue Zertifikate erstellen? (y/N): " -n 1 -r - echo - if [[ ! $REPLY =~ ^[Yy]$ ]]; then - log_info "Zertifikate bleiben unverändert" - exit 0 +# Führe entsprechenden Setup-Typ aus +case $CERT_TYPE in + "self-signed") + # Prüfe ob bereits Zertifikate existieren + if [ -f "$CERT_FILE" ] && [ -f "$KEY_FILE" ]; then + log_info "Zertifikate existieren bereits" + + # Prüfe Gültigkeit der Zertifikate + if openssl x509 -in "$CERT_FILE" -text -noout &> /dev/null; then + log_success "Zertifikat ist gültig" + + # Zeige Zertifikats-Informationen + log_info "Zertifikats-Informationen:" + openssl x509 -in "$CERT_FILE" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" + + read -p "Möchten Sie neue Zertifikate erstellen? (y/N): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_info "Zertifikate bleiben unverändert" + exit 0 + fi + else + log_warning "Zertifikat ist ungültig, erstelle neue..." + fi fi - else - log_warning "Zertifikat ist ungültig, erstelle neue..." - fi -fi -log_info "Erstelle neue SSL-Zertifikate..." + log_info "Erstelle neue Self-Signed SSL-Zertifikate..." -# Erstelle Private Key -log_info "Erstelle Private Key..." -sudo openssl genrsa -out "$KEY_FILE" 2048 -sudo chmod 600 "$KEY_FILE" -sudo chown yourpart:yourpart "$KEY_FILE" + # Erstelle Private Key + log_info "Erstelle Private Key..." + sudo openssl genrsa -out "$KEY_FILE" 2048 + sudo chmod 600 "$KEY_FILE" + sudo chown yourpart:yourpart "$KEY_FILE" -# Erstelle Certificate Signing Request (CSR) -log_info "Erstelle Certificate Signing Request..." -sudo openssl req -new -key "$KEY_FILE" -out "$CSR_FILE" -subj "/C=DE/ST=Germany/L=Berlin/O=YourPart/OU=IT/CN=your-part.de" + # Erstelle Certificate Signing Request (CSR) + log_info "Erstelle Certificate Signing Request..." + sudo openssl req -new -key "$KEY_FILE" -out "$CSR_FILE" -subj "/C=DE/ST=Germany/L=Berlin/O=YourPart/OU=IT/CN=your-part.de" -# Erstelle Self-Signed Certificate -log_info "Erstelle Self-Signed Certificate..." -sudo openssl x509 -req -days 365 -in "$CSR_FILE" -signkey "$KEY_FILE" -out "$CERT_FILE" + # Erstelle Self-Signed Certificate + log_info "Erstelle Self-Signed Certificate..." + sudo openssl x509 -req -days 365 -in "$CSR_FILE" -signkey "$KEY_FILE" -out "$CERT_FILE" -# Setze korrekte Berechtigungen -sudo chmod 644 "$CERT_FILE" -sudo chown yourpart:yourpart "$CERT_FILE" + # Setze korrekte Berechtigungen + sudo chmod 644 "$CERT_FILE" + sudo chown yourpart:yourpart "$CERT_FILE" -# Lösche CSR-Datei (nicht mehr benötigt) -sudo rm -f "$CSR_FILE" + # Lösche CSR-Datei (nicht mehr benötigt) + sudo rm -f "$CSR_FILE" -log_success "SSL-Zertifikate erfolgreich erstellt!" + log_success "Self-Signed SSL-Zertifikate erfolgreich erstellt!" + ;; + + "letsencrypt") + setup_letsencrypt + ;; + + "existing-letsencrypt") + if [ -f "$LETSENCRYPT_CERT" ] && [ -f "$LETSENCRYPT_KEY" ]; then + log_info "Verwende bestehende Let's Encrypt Zertifikate..." + + # Erstelle Symlinks zu den Zertifikaten + sudo ln -sf "$LETSENCRYPT_CERT" "$CERT_FILE" + sudo ln -sf "$LETSENCRYPT_KEY" "$KEY_FILE" + + # Setze korrekte Berechtigungen + sudo chown yourpart:yourpart "$CERT_FILE" "$KEY_FILE" + sudo chmod 644 "$CERT_FILE" + sudo chmod 600 "$KEY_FILE" + + log_success "Let's Encrypt Zertifikate erfolgreich verlinkt!" + + # Richte Auto-Renewal ein + setup_auto_renewal + else + log_error "Let's Encrypt Zertifikate nicht gefunden in $LETSENCRYPT_DIR" + log_info "Führen Sie zuerst 'certbot certonly' aus oder wählen Sie Option 2" + exit 1 + fi + ;; +esac # Zeige Zertifikats-Informationen log_info "Zertifikats-Informationen:" @@ -108,5 +295,10 @@ log_info " sudo systemctl restart yourpart-daemon" log_info "3. Verbinde dich mit:" log_info " wss://your-part.de:4551" log_info "" -log_warning "Hinweis: Dies ist ein Self-Signed Certificate!" -log_warning "Für Produktionsumgebungen verwenden Sie Zertifikate von einer vertrauenswürdigen CA." + +if [ "$CERT_TYPE" = "self-signed" ]; then + log_warning "Hinweis: Dies ist ein Self-Signed Certificate!" + log_warning "Für Produktionsumgebungen verwenden Sie Let's Encrypt (Option 2)." +else + log_success "Let's Encrypt Zertifikat ist produktionsbereit!" +fi