237 lines
7.0 KiB
Bash
Executable File
237 lines
7.0 KiB
Bash
Executable File
#!/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
|