CLI AI

SSL-Zertifikat mit openssl auf Ablaufdatum prüfen

2026-06-27

Der schnellste Weg, das Ablaufdatum eines SSL-Zertifikats zu prüfen, ist echo | openssl s_client -servername host -connect host:443 2>/dev/null | openssl x509 -noout -enddate — das gibt das genaue notAfter-Datum aus, ganz ohne Browser. Von dort aus lässt sich das Datum in eine Anzahl Tage umrechnen, ein Pass/Fail-Check für cron bauen, oder gleich eine ganze Liste von Domains durchgehen. Das ist der komplette Workflow, nicht nur der eine Befehl, den ohnehin jeder kennt.

1. Wann läuft das Zertifikat einer Seite ab

clai
$ clai wann läuft das Zertifikat von cliai.tech ab→ echo | openssl s_client -servername cliai.tech -connect cliai.tech:443 2>/dev/null | openssl x509 -noout -enddate -subjectnotAfter=Nov  2 10:19:50 2026 GMTsubject=CN=cliai.tech

echo | schließt die Standardeingabe, sonst hängt s_client in der interaktiven Eingabe fest. -servername setzt SNI und ist Pflicht, sobald eine IP mehr als eine Seite bedient — was fast immer der Fall ist.

2. Wie viele Tage bleiben

clai
$ clai wie viele Tage bis das Zertifikat von cliai.tech abläuft→ exp=$(echo | openssl s_client -servername cliai.tech -connect cliai.tech:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2); echo $(( ($(date -d "$exp" +%s) - $(date +%s)) / 86400 )) days

date -d parst das Datumsformat von OpenSSL, der Rest ist gewöhnliche Arithmetik in Sekunden. Genau diese Zahl vergleicht man in der Überwachung mit einem Schwellenwert.

3. Prüfung ohne eigene Arithmetik

clai
$ clai prüfe ob das Zertifikat in den nächsten 30 Tagen abläuft→ echo | openssl s_client -servername cliai.tech -connect cliai.tech:443 2>/dev/null | openssl x509 -noout -checkend 2592000 && echo "ok" || echo "expires within 30 days"

-checkend erwartet Sekunden und liefert einen Exit-Code zurück, keinen Text. 2592000 sind 30 Tage. Fertig für ein Skript — nichts zu parsen.

4. Eine ganze Liste von Domains auf einmal

clai
$ clai prüfe die Zertifikatslaufzeiten für eine Liste von Domains aus einer Datei→ while read d; do printf '%-28s ' "$d"; echo | openssl s_client -servername "$d" -connect "$d":443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2; done < domains.txt

Derselbe Trick in einer Schleife. Halten Sie domains.txt neben dem Skript — die Liste zu aktualisieren ist einfacher als den Befehl zu ändern.

5. Eine lokale Zertifikatsdatei

clai
$ clai zeig das Ablaufdatum dieser Zertifikatsdatei→ openssl x509 -in /etc/ssl/certs/example.pem -noout -dates

Für eine Datei, die schon auf der Festplatte liegt, braucht man s_client gar nicht. -dates zeigt notBefore und notAfter — Ersteres ist wichtig, wenn ein Zertifikat "für die Zukunft" ausgestellt wurde und noch nicht gültig ist.

6. Die ganze Zertifikatskette ansehen

clai
$ clai zeig die Zertifikatskette dieser Seite→ echo | openssl s_client -servername cliai.tech -connect cliai.tech:443 -showcerts 2>/dev/null | grep -E 's:|i:'

-showcerts liefert die ganze Kette; s:-Zeilen sind der Subject, i:-Zeilen der Issuer. Eine unvollständige Kette ist ein häufiger Grund, warum eine Seite im Browser lädt, aber bei curl oder in einer mobilen App scheitert.

Stolperfallen

  • Ohne -servername prüfen Sie womöglich das falsche Zertifikat. Auf einer geteilten IP liefert ein Server ohne SNI sein Standardzertifikat aus, und Sie messen die Laufzeit einer anderen Seite.
  • date -d gibt es nur unter GNU. Unter macOS brauchen Sie date -j -f '%b %d %T %Y %Z', mit dem Eingabeformat von Hand angegeben.
  • Zertifikatsablauf und Domain-Ablauf sind zwei verschiedene Dinge. Die automatische Zertifikatserneuerung nützt nichts, wenn die Domain selbst abläuft oder der ACME-Challenge scheitert.

Verwandte Fragen

Wie prüfe ich ein Zertifikat auf einem nicht standardmäßigen Port? Den Port in -connect einsetzen, z. B. -connect mail.example.com:993, und -starttls imap für Protokolle mit Verbindungs-Upgrade ergänzen.

Warum zeigt der Browser ein gültiges Zertifikat, während curl sich beschwert? Meist eine unvollständige Kette: Der Browser lädt das fehlende Zwischenzertifikat selbst nach, curl nicht. Die Ausgabe von -showcerts prüfen.

Wie automatisiere ich die Benachrichtigung? Die -checkend-Variante in cron packen und bei einem Exit-Code ungleich null benachrichtigen. Ein Schwellenwert von 30 Tagen lässt Zeit zum Reagieren.

Siehe auch

Schluss mit handgeschriebenen openssl-Befehlen — beschreiben Sie, was Sie brauchen, CliAI schreibt den Befehl. In einer Zeile installieren.