Ab und zu muss man die Zertifikate auf dem Server kontrollieren

Ab und zu muss man die Zertifikate auf dem Server kontrollieren
Photo by Christopher Gower / Unsplash

Ab und zu muss man die Zertifikate auf dem Server kontrollieren und aktualisieren damit diese nicht ablaufen, denn dann gibt’s Fehler wenn man die entsprechenden Webseiten aufrufen möchte.

Es gibt unzählige Seiten wo man die Zertifikate überrprüfen lassen kann. Das war mir aber zu einfach. Ich habe mir ein kleines Skript erstellt womit ich das direkt auf dem Server ausführen kann.

Das Skript ist ein Bash Skript welches folgendermaßen ausgeführt wird. In dem Beispiel nutze ich meinen eigenen Blog um das zu demonstrieren.

./test_ssl.sh geekzone.blog

Das Ergebnis sind folgend:

#!/bin/bash

# Setze die Domain-Adresse
DOMAIN="$1"

# Überprüfe, ob eine Domain eingegeben wurde
if [ -z "$DOMAIN" ]; then
  echo "Usage: $0 [domain]"
  exit 1
fi

# Verwende OpenSSL, um Verbindungsdetails und das Zertifikat zu bekommen
CERT_INFO=$(openssl s_client -connect $DOMAIN:443 -servername $DOMAIN </dev/null 2>/dev/null)

# Extrahiere Informationen aus dem Zertifikat
echo "Details des SSL-Zertifikats für $DOMAIN:"
echo "------------------------------------------------------------"
echo "$CERT_INFO" | openssl x509 -noout -issuer -subject -dates -fingerprint
echo "$CERT_INFO" | openssl x509 -noout -text | grep "Signature Algorithm"
echo "------------------------------------------------------------"

# Ablaufdatum des Zertifikats
echo "Ablaufdatum des Zertifikats:"
echo "$CERT_INFO" | openssl x509 -noout -enddate

# Ermittle IP-Adresse(n)
echo "IP-Adresse(n) der Domain:"
host $DOMAIN | grep "has address" | cut -d " " -f 4

# Überprüfen auf SAN (Subject Alternative Names)
echo "Subject Alternative Name (SAN):"
echo "$CERT_INFO" | openssl x509 -noout -text | grep -A1 "Subject Alternative Name:" | tail -n +2

# Ermittlung des Domain-Alters über whois
echo "Domain-Alter:"
WHOIS_INFO=$(whois $DOMAIN)
echo "$WHOIS_INFO" | grep -i "Creation Date" | head -n 1
lars@Debian-bookworm-latest-amd64-base:~$ ./
-bash: ./: Is a directory
lars@Debian-bookworm-latest-amd64-base:~$ ./test_ssl.sh geekzone.blog
Details des SSL-Zertifikats für geekzone.blog:
------------------------------------------------------------
issuer=C = US, O = Let's Encrypt, CN = E5
subject=CN = www.geekzone.blog
notBefore=Jun 17 14:59:21 2024 GMT
notAfter=Sep 15 14:59:20 2024 GMT
SHA1 Fingerprint=3A:67:07:E5:D8:C8:E9:E6:84:57:54:80:C3:F5:1E:9F:BF:5B:7D:35
        Signature Algorithm: ecdsa-with-SHA384
    Signature Algorithm: ecdsa-with-SHA384
------------------------------------------------------------
Ablaufdatum des Zertifikats:
notAfter=Sep 15 14:59:20 2024 GMT
IP-Adresse(n) der Domain:
138.201.248.102
Subject Alternative Name (SAN):
                DNS:geekzone.blog, DNS:www.geekzone.blog
Domain-Alter:
Creation Date: 2024-06-17T14:00:40.0Z

Man sieht das Ablaufdatum und welche Domains involviert sind sowie das Datum wann der Zertifikat.

#!/bin/bash

# Setze die Domain-Adresse
DOMAIN="$1"

# Überprüfe, ob eine Domain eingegeben wurde
if [ -z "$DOMAIN" ]; then
  echo "Usage: $0 [domain]"
  exit 1
fi

# Verwende OpenSSL, um Verbindungsdetails und das Zertifikat zu bekommen
CERT_INFO=$(openssl s_client -connect $DOMAIN:443 -servername $DOMAIN </dev/null 2>/dev/null)

# Extrahiere Informationen aus dem Zertifikat
echo "Details des SSL-Zertifikats für $DOMAIN:"
echo "------------------------------------------------------------"
echo "$CERT_INFO" | openssl x509 -noout -issuer -subject -dates -fingerprint
echo "$CERT_INFO" | openssl x509 -noout -text | grep "Signature Algorithm"
echo "------------------------------------------------------------"

# Ablaufdatum des Zertifikats
echo "Ablaufdatum des Zertifikats:"
echo "$CERT_INFO" | openssl x509 -noout -enddate

# Ermittle IP-Adresse(n)
echo "IP-Adresse(n) der Domain:"
host $DOMAIN | grep "has address" | cut -d " " -f 4

# Überprüfen auf SAN (Subject Alternative Names)
echo "Subject Alternative Name (SAN):"
echo "$CERT_INFO" | openssl x509 -noout -text | grep -A1 "Subject Alternative Name:" | tail -n +2

# Ermittlung des Domain-Alters über whois
echo "Domain-Alter:"
WHOIS_INFO=$(whois $DOMAIN)
echo "$WHOIS_INFO" | grep -i "Creation Date" | head -n 1

So muss ich dann keine andere Seite nutzen wenn wieder irgendein Zertifikat überprüfen muss.