Zertifikat-Management

Übersicht aller TLS-Zertifikate, Laufzeiten, Auto-Renewal und Notfallprozesse. Kein Zertifikat läuft ab ohne dass jemand es weiß.

Prinzip: Alle Zertifikate im Register

Single Source of Truth Jedes TLS-Zertifikat das wir betreiben steht in intelego/specs/infrastructure/certs/cert-inventory.yaml. Der Health-Check prüft Ablaufdaten automatisch bei jedem trigger-validation-chain.sh full.

Warn-Schwellen

StatusVerbleibende TageAktion
OK> 30 TageKeine Aktion nötig
WARN7–30 TageRenewal prüfen / manuell erneuern
CRITICAL< 7 TageSofort erneuern — Ausfall droht

Aktuelle Zertifikate

DomainServiceAussteller Gültig bisAuto-RenewalNode
gitlab.intelego.solutions GitLab CE Let's Encrypt R13 25.07.2026 OK täglich 03:30 intelego

Vollständige Liste: intelego/specs/infrastructure/certs/cert-inventory.yaml

Let's Encrypt Renewal

Automatisch (Standard)

GitLab CE erneuert Let's Encrypt automatisch täglich um 03:30. Kein manueller Eingriff nötig solange Port 80 erreichbar ist.

Manuell erzwingen

ssh root@178.105.26.127
gitlab-ctl renew-le-certs

Status prüfen

ssh root@178.105.26.127 \
  "openssl x509 -in /etc/gitlab/ssl/gitlab.intelego.solutions.crt \
   -noout -subject -issuer -dates"

Voraussetzungen für Auto-Renewal

  • DNS zeigt auf Server (Port 80 ACME-Challenge)
  • Port 80 von extern erreichbar
  • Server läuft 03:30 Uhr UTC

Neues Zertifikat registrieren

Wenn ein neuer Service mit TLS aufgebaut wird:

  1. Zertifikat installieren
  2. Eintrag in cert-inventory.yaml hinzufügen
  3. Health-Check laufen lassen
  4. Commit + Evidence

Template

- id: "subdomain.domain.tld"
  service: "Service Name"
  domain: "subdomain.domain.tld"
  server: "IP"
  path_on_server: "/pfad/cert.crt"
  issuer: "Let's Encrypt R13"
  issued: "YYYY-MM-DD"
  expires: "YYYY-MM-DD"
  auto_renew: true
  renew_method: "gitlab-ctl renew-le-certs"
  node: "intelego"
  status: "active"

Notfall: Zertifikat abgelaufen

Wenn HTTPS nicht mehr funktioniert Service ist für alle Nutzer nicht erreichbar. Sofortmaßnahme: temporär HTTP aktivieren, dann Zertifikat erneuern.

Sofortmaßnahme GitLab

# 1. Zertifikat erneuern
ssh root@SERVER 'gitlab-ctl renew-le-certs'

# 2. Falls Port 80 blockiert ist:
ssh root@SERVER 'gitlab-ctl reconfigure'

# 3. Falls Let's Encrypt nicht geht (DNS-Problem):
# Selbst-signiertes Zertifikat als Überbrückung
ssh root@SERVER "
  cd /etc/gitlab/ssl
  openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout gitlab.intelego.solutions.key \
    -out gitlab.intelego.solutions.crt \
    -subj '/CN=gitlab.intelego.solutions'
  gitlab-ctl reconfigure
"

Zertifikat widerrufen

Wenn ein privater Key kompromittiert wurde:

# Let's Encrypt Zertifikat widerrufen
certbot revoke \
  --cert-path /etc/gitlab/ssl/gitlab.intelego.solutions.crt

# Danach sofort neues Zertifikat holen
gitlab-ctl renew-le-certs

Nach Widerruf: Eintrag in cert-inventory.yaml auf status: "revoked" setzen + Commit.

Automatischer Health-Check

Der Zertifikat-Check läuft automatisch in der Validation Chain:

bash iio/specs/scripts/trigger-validation-chain.sh /home/zolo/space full
# → Check 5: Zertifikat-Ablauf (aus cert-inventory.yaml)

Oder manuell:

bash iio/base/health-check/scripts/health-check-all.sh /home/zolo/space

IIO Manual · Zertifikat-Management · Register: intelego/specs/infrastructure/certs/cert-inventory.yaml · ← Übersicht