diff --git a/SSL-SETUP.md b/SSL-SETUP.md index a03f5e8..ff156be 100644 --- a/SSL-SETUP.md +++ b/SSL-SETUP.md @@ -16,7 +16,14 @@ Dieses Dokument beschreibt, wie Sie SSL/TLS-Zertifikate für den YourPart Daemon # Wählen Sie Option 2 ``` -### 3. DNS-01 Challenge (für komplexe Setups) +### 3. Apache2-Zertifikate verwenden (empfohlen für Ubuntu) +```bash +./setup-ssl.sh +# Wählen Sie Option 4 +# Verwendet bereits vorhandene Apache2-Zertifikate +``` + +### 4. DNS-01 Challenge (für komplexe Setups) ```bash ./setup-ssl-dns.sh # Für Cloudflare, Route53, etc. @@ -24,6 +31,13 @@ Dieses Dokument beschreibt, wie Sie SSL/TLS-Zertifikate für den YourPart Daemon ## 📋 Voraussetzungen +### Für Apache2-Zertifikate: +- Apache2 installiert oder Zertifikate in Standard-Pfaden +- Unterstützte Pfade: + - `/etc/ssl/certs/ssl-cert-snakeoil.pem` (Ubuntu Standard) + - `/etc/letsencrypt/live/your-part.de/fullchain.pem` (Let's Encrypt) + - `/etc/apache2/ssl/apache.crt` (Custom Apache2) + ### Für Let's Encrypt (HTTP-01 Challenge): - Port 80 muss verfügbar sein - Domain `your-part.de` muss auf den Server zeigen @@ -61,11 +75,16 @@ Nach der Zertifikats-Erstellung: ## 🔄 Automatische Erneuerung -Let's Encrypt-Zertifikate werden automatisch erneuert: +### 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 ``` diff --git a/setup-ssl.sh b/setup-ssl.sh index 31f2ad8..199da7e 100755 --- a/setup-ssl.sh +++ b/setup-ssl.sh @@ -39,6 +39,14 @@ LETSENCRYPT_DIR="/etc/letsencrypt/live" LETSENCRYPT_CERT="$LETSENCRYPT_DIR/your-part.de/fullchain.pem" LETSENCRYPT_KEY="$LETSENCRYPT_DIR/your-part.de/privkey.pem" +# Apache2 Zertifikate (Ubuntu/Debian) +APACHE2_CERT="/etc/ssl/certs/ssl-cert-snakeoil.pem" +APACHE2_KEY="/etc/ssl/private/ssl-cert-snakeoil.key" + +# Apache2 Let's Encrypt Zertifikate +APACHE2_LE_CERT="/etc/letsencrypt/live/your-part.de/fullchain.pem" +APACHE2_LE_KEY="/etc/letsencrypt/live/your-part.de/privkey.pem" + # Prüfe ob OpenSSL installiert ist if ! command -v openssl &> /dev/null; then log_error "OpenSSL ist nicht installiert!" @@ -124,6 +132,91 @@ setup_letsencrypt() { fi } +setup_apache2_certificates() { + log_info "Apache2 Zertifikate Setup" + + # Prüfe ob Apache2 installiert ist + if ! command -v apache2 &> /dev/null && ! command -v httpd &> /dev/null; then + log_warning "Apache2 ist nicht installiert, aber wir können trotzdem die Zertifikate verwenden" + fi + + # Prüfe verschiedene Apache2 Zertifikats-Pfade + APACHE2_CERT_PATHS=( + "/etc/ssl/certs/ssl-cert-snakeoil.pem" + "/etc/ssl/certs/apache-selfsigned.crt" + "/etc/apache2/ssl/apache.crt" + "/etc/httpd/ssl/apache.crt" + "/etc/letsencrypt/live/$(hostname)/fullchain.pem" + "/etc/letsencrypt/live/your-part.de/fullchain.pem" + ) + + APACHE2_KEY_PATHS=( + "/etc/ssl/private/ssl-cert-snakeoil.key" + "/etc/ssl/private/apache-selfsigned.key" + "/etc/apache2/ssl/apache.key" + "/etc/httpd/ssl/apache.key" + "/etc/letsencrypt/live/$(hostname)/privkey.pem" + "/etc/letsencrypt/live/your-part.de/privkey.pem" + ) + + # Finde verfügbare Zertifikate + FOUND_CERT="" + FOUND_KEY="" + + for cert_path in "${APACHE2_CERT_PATHS[@]}"; do + if [ -f "$cert_path" ]; then + FOUND_CERT="$cert_path" + log_info "Gefundenes Zertifikat: $cert_path" + break + fi + done + + for key_path in "${APACHE2_KEY_PATHS[@]}"; do + if [ -f "$key_path" ]; then + FOUND_KEY="$key_path" + log_info "Gefundener Private Key: $key_path" + break + fi + done + + if [ -z "$FOUND_CERT" ] || [ -z "$FOUND_KEY" ]; then + log_error "Keine Apache2-Zertifikate gefunden!" + log_info "Verfügbare Pfade:" + for path in "${APACHE2_CERT_PATHS[@]}" "${APACHE2_KEY_PATHS[@]}"; do + if [ -f "$path" ]; then + log_info " ✓ $path" + else + log_info " ✗ $path" + fi + done + exit 1 + fi + + # Erstelle Symlinks zu den Apache2-Zertifikaten + log_info "Erstelle Symlinks zu Apache2-Zertifikaten..." + sudo ln -sf "$FOUND_CERT" "$CERT_FILE" + sudo ln -sf "$FOUND_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 "Apache2-Zertifikate erfolgreich verlinkt!" + + # Zeige Zertifikats-Informationen + log_info "Apache2-Zertifikats-Informationen:" + openssl x509 -in "$CERT_FILE" -text -noout | grep -E "(Subject:|Not Before|Not After|DNS:)" + + # Prüfe ob es sich um Let's Encrypt-Zertifikate handelt + if [[ "$FOUND_CERT" == *"letsencrypt"* ]]; then + log_info "Let's Encrypt-Zertifikate erkannt, richte Auto-Renewal ein..." + setup_auto_renewal + else + log_warning "Self-Signed oder andere Zertifikate erkannt - kein Auto-Renewal eingerichtet" + fi +} + setup_auto_renewal() { log_info "Richte automatische Zertifikats-Erneuerung ein..." @@ -172,8 +265,9 @@ 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 "4) Apache2-Zertifikate verwenden (empfohlen für Ubuntu)" echo "" -read -p "Ihre Wahl (1-3): " -n 1 -r +read -p "Ihre Wahl (1-4): " -n 1 -r echo "" case $REPLY in @@ -189,6 +283,10 @@ case $REPLY in log_info "Bestehende Let's Encrypt Zertifikate werden verwendet..." CERT_TYPE="existing-letsencrypt" ;; + 4) + log_info "Apache2-Zertifikate werden verwendet..." + CERT_TYPE="apache2" + ;; *) log_error "Ungültige Auswahl!" exit 1 @@ -280,6 +378,10 @@ case $CERT_TYPE in exit 1 fi ;; + + "apache2") + setup_apache2_certificates + ;; esac # Zeige Zertifikats-Informationen @@ -296,9 +398,16 @@ log_info "3. Verbinde dich mit:" log_info " wss://your-part.de:4551" log_info "" -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 +case $CERT_TYPE in + "self-signed") + log_warning "Hinweis: Dies ist ein Self-Signed Certificate!" + log_warning "Für Produktionsumgebungen verwenden Sie Let's Encrypt oder Apache2-Zertifikate." + ;; + "apache2") + log_success "Apache2-Zertifikate erfolgreich konfiguriert!" + log_info "Diese Zertifikate werden automatisch von Apache2 verwaltet." + ;; + *) + log_success "Let's Encrypt Zertifikat ist produktionsbereit!" + ;; +esac