From 6104a67c9ec2c1a9b7e9088624c9ad9d55774279 Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 5 Aug 2026 19:34:25 +0200 Subject: [PATCH] feat(tls): optionales certbot-Setup vorbereitet (Option A) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setup-tls.sh: auf Server ausführbares, manuelles Skript für direktes Let's-Encrypt-Zertifikat via certbot --nginx. Bleibt ungenutzt solange der vorgeschaltete Proxy TLS+Domain übernimmt (aktueller Stand) - nginx.conf bleibt deshalb bewusst HTTP-only, certbot würde die 443-Erweiterung selbst in /etc/nginx/ einfügen, nicht ins Repo. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01LTxkZEUdfgMxZvHPiZJ8bV --- nginx.conf | 13 +++++++------ setup-tls.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 6 deletions(-) create mode 100755 setup-tls.sh diff --git a/nginx.conf b/nginx.conf index 99985b1..0be828c 100644 --- a/nginx.conf +++ b/nginx.conf @@ -1,9 +1,10 @@ -# HTTP-only Konfiguration (SSL/HTTPS noch nicht eingerichtet) -# Sobald ein TLS-Zertifikat vorhanden ist: -# 1. Listen-Block auf 443 ssl http2 erweitern -# 2. ssl_certificate / ssl_certificate_key einkommentieren -# 3. HSTS-Header hinzufügen -# 4. HTTP->HTTPS-Redirect aktivieren +# HTTP-only Konfiguration – bewusst so, aktuell übernimmt ein vorgeschalteter +# Proxy TLS-Terminierung + Domain. Diese Datei bleibt deshalb HTTP-only. +# +# Optional (falls der Server künftig OHNE vorgeschalteten Proxy direkt mit +# eigenem Zertifikat laufen soll): ./setup-tls.sh auf dem Server +# ausführen (certbot --nginx, holt Zertifikat + fügt 443-Block automatisch in +# /etc/nginx/sites-available/timemaster ein, NICHT in dieses Repo-File). server { listen 80; diff --git a/setup-tls.sh b/setup-tls.sh new file mode 100755 index 0000000..33b00a7 --- /dev/null +++ b/setup-tls.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# ============================================================================= +# setup-tls.sh – AUF DEM SERVER ausführen (nicht lokal), OPTIONAL +# +# Aktiviert direktes TLS-Zertifikat via certbot/Let's Encrypt für diesen +# Server. NICHT nötig solange ein vorgeschalteter Proxy die Domain + +# Zertifikat übernimmt (aktueller Stand) – dann läuft nginx.conf bewusst +# reines HTTP hinter dem Proxy weiter, dieses Skript bleibt ungenutzt. +# +# Erst ausführen wenn: +# - der Server direkt (ohne vorgeschalteten Proxy) erreichbar sein soll, UND +# - eine echte Domain per DNS auf diesen Server zeigt (A-Record) +# +# Macht NICHTS automatisch am Server-Setup – muss manuell mit Domain +# aufgerufen werden: +# ssh root@ "cd /opt/timemaster && ./setup-tls.sh timemaster.example.com" +# +# certbot --nginx erweitert /etc/nginx/sites-available/timemaster selbst um +# den 443-Block (SSL-Zertifikat, HSTS optional per --redirect-Flag) und +# richtet einen systemd-Timer für automatisches Renewal ein (certbot.timer). +# Das Repo-nginx.conf bleibt absichtlich HTTP-only – die von certbot +# vorgenommene Änderung landet direkt in /etc/nginx/, nicht im Git-Tree. +# ============================================================================= +set -euo pipefail + +DOMAIN="${1:-}" +if [[ -z "$DOMAIN" ]]; then + echo "Usage: ./setup-tls.sh " >&2 + echo "Beispiel: ./setup-tls.sh timemaster.example.com" >&2 + exit 1 +fi + +if ! command -v certbot >/dev/null 2>&1; then + echo "==> Installiere certbot + nginx-Plugin" + apt-get update -qq + apt-get install -y certbot python3-certbot-nginx +fi + +echo "==> Prüfe DNS-Auflösung für $DOMAIN" +RESOLVED="$(getent hosts "$DOMAIN" | awk '{print $1}' | head -1 || true)" +if [[ -z "$RESOLVED" ]]; then + echo "FEHLER: $DOMAIN löst nicht auf. A-Record setzen, dann erneut versuchen." >&2 + exit 1 +fi +echo " $DOMAIN -> $RESOLVED" + +echo "==> Hole Zertifikat + richte 443-Redirect ein (certbot --nginx)" +certbot --nginx -d "$DOMAIN" --redirect --hsts --agree-tos --non-interactive \ + -m "${CERTBOT_EMAIL:-admin@${DOMAIN}}" + +echo "==> Renewal-Timer prüfen" +systemctl status certbot.timer --no-pager | head -5 + +echo "==> Fertig. HTTPS aktiv unter https://$DOMAIN" +echo " Falls vorher ein Proxy davor stand: DNS/Load-Balancer jetzt auf diesen Server direkt zeigen lassen."