Erweitere das SSL/TLS Setup-Skript um Unterstützung für Apache2-Zertifikate. Füge eine neue Funktion zum Einrichten und Verlinken von Apache2-Zertifikaten hinzu, einschließlich der Überprüfung auf vorhandene Zertifikate und der automatischen Erneuerung für Let's Encrypt. Aktualisiere die Benutzerführung zur Auswahl von Zertifikatstypen und dokumentiere die neuen Optionen in der SSL-Setup-Dokumentation.

This commit is contained in:
Torsten Schulz (local)
2025-09-03 15:02:30 +02:00
committed by Torsten (PC)
parent 664f2af346
commit 60352d7932
2 changed files with 137 additions and 9 deletions

View File

@@ -16,7 +16,14 @@ Dieses Dokument beschreibt, wie Sie SSL/TLS-Zertifikate für den YourPart Daemon
# Wählen Sie Option 2 # 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 ```bash
./setup-ssl-dns.sh ./setup-ssl-dns.sh
# Für Cloudflare, Route53, etc. # Für Cloudflare, Route53, etc.
@@ -24,6 +31,13 @@ Dieses Dokument beschreibt, wie Sie SSL/TLS-Zertifikate für den YourPart Daemon
## 📋 Voraussetzungen ## 📋 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): ### Für Let's Encrypt (HTTP-01 Challenge):
- Port 80 muss verfügbar sein - Port 80 muss verfügbar sein
- Domain `your-part.de` muss auf den Server zeigen - Domain `your-part.de` muss auf den Server zeigen
@@ -61,11 +75,16 @@ Nach der Zertifikats-Erstellung:
## 🔄 Automatische Erneuerung ## 🔄 Automatische Erneuerung
Let's Encrypt-Zertifikate werden automatisch erneuert: ### Let's Encrypt-Zertifikate:
- **Cron Job:** Täglich um 2:30 Uhr - **Cron Job:** Täglich um 2:30 Uhr
- **Script:** `/etc/yourpart/renew-ssl.sh` - **Script:** `/etc/yourpart/renew-ssl.sh`
- **Log:** `/var/log/yourpart/ssl-renewal.log` - **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 ## 📁 Dateistruktur
``` ```

View File

@@ -39,6 +39,14 @@ LETSENCRYPT_DIR="/etc/letsencrypt/live"
LETSENCRYPT_CERT="$LETSENCRYPT_DIR/your-part.de/fullchain.pem" LETSENCRYPT_CERT="$LETSENCRYPT_DIR/your-part.de/fullchain.pem"
LETSENCRYPT_KEY="$LETSENCRYPT_DIR/your-part.de/privkey.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 # Prüfe ob OpenSSL installiert ist
if ! command -v openssl &> /dev/null; then if ! command -v openssl &> /dev/null; then
log_error "OpenSSL ist nicht installiert!" log_error "OpenSSL ist nicht installiert!"
@@ -124,6 +132,91 @@ setup_letsencrypt() {
fi 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() { setup_auto_renewal() {
log_info "Richte automatische Zertifikats-Erneuerung ein..." 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 "1) Self-Signed Certificate (für Entwicklung/Testing)"
echo "2) Let's Encrypt Certificate (für Produktion)" echo "2) Let's Encrypt Certificate (für Produktion)"
echo "3) Bestehende Let's Encrypt Zertifikate verwenden" echo "3) Bestehende Let's Encrypt Zertifikate verwenden"
echo "4) Apache2-Zertifikate verwenden (empfohlen für Ubuntu)"
echo "" echo ""
read -p "Ihre Wahl (1-3): " -n 1 -r read -p "Ihre Wahl (1-4): " -n 1 -r
echo "" echo ""
case $REPLY in case $REPLY in
@@ -189,6 +283,10 @@ case $REPLY in
log_info "Bestehende Let's Encrypt Zertifikate werden verwendet..." log_info "Bestehende Let's Encrypt Zertifikate werden verwendet..."
CERT_TYPE="existing-letsencrypt" CERT_TYPE="existing-letsencrypt"
;; ;;
4)
log_info "Apache2-Zertifikate werden verwendet..."
CERT_TYPE="apache2"
;;
*) *)
log_error "Ungültige Auswahl!" log_error "Ungültige Auswahl!"
exit 1 exit 1
@@ -280,6 +378,10 @@ case $CERT_TYPE in
exit 1 exit 1
fi fi
;; ;;
"apache2")
setup_apache2_certificates
;;
esac esac
# Zeige Zertifikats-Informationen # Zeige Zertifikats-Informationen
@@ -296,9 +398,16 @@ log_info "3. Verbinde dich mit:"
log_info " wss://your-part.de:4551" log_info " wss://your-part.de:4551"
log_info "" log_info ""
if [ "$CERT_TYPE" = "self-signed" ]; then case $CERT_TYPE in
log_warning "Hinweis: Dies ist ein Self-Signed Certificate!" "self-signed")
log_warning "Für Produktionsumgebungen verwenden Sie Let's Encrypt (Option 2)." log_warning "Hinweis: Dies ist ein Self-Signed Certificate!"
else log_warning "Für Produktionsumgebungen verwenden Sie Let's Encrypt oder Apache2-Zertifikate."
log_success "Let's Encrypt Zertifikat ist produktionsbereit!" ;;
fi "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