Erweitere das SSL/TLS Setup-Skript für den YourPart Daemon um Unterstützung für Let's Encrypt. Füge Funktionen zur Erstellung und Erneuerung von Let's Encrypt Zertifikaten hinzu, einschließlich automatischer Erneuerung über Cron Jobs. Ermögliche die Auswahl zwischen Self-Signed und Let's Encrypt Zertifikaten und verbessere die Benutzerführung bei der Zertifikatsauswahl.
This commit is contained in:
committed by
Torsten (PC)
parent
8212e906a3
commit
664f2af346
147
SSL-SETUP.md
Normal file
147
SSL-SETUP.md
Normal file
@@ -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`
|
||||
236
setup-ssl-dns.sh
Executable file
236
setup-ssl-dns.sh
Executable file
@@ -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
|
||||
238
setup-ssl.sh
238
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,22 +34,178 @@ 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
|
||||
# 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
|
||||
@@ -68,32 +225,62 @@ if [ -f "$CERT_FILE" ] && [ -f "$KEY_FILE" ]; then
|
||||
else
|
||||
log_warning "Zertifikat ist ungültig, erstelle neue..."
|
||||
fi
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user