it-swarm.com.de

Wie ermittle ich das Ablaufdatum eines SSL-Zertifikats anhand eines PEM-codierten Zertifikats?

Wenn ich die eigentliche Datei und eine Bash-Shell unter Mac oder Linux habe, wie kann ich die Cert-Datei abfragen, wann sie abläuft? Keine Website, sondern die Zertifikatsdatei selbst, vorausgesetzt, ich habe die Dateien csr, key, pem und chain.

265
GL2014

Mit openssl:

openssl x509 -enddate -noout -in file.pem

Die Ausgabe erfolgt auf dem Formular:

notAfter=Nov  3 22:23:50 2014 GMT

Lesen Sie auch Antwort von MikeW , um zu überprüfen, ob das Zertifikat abgelaufen ist oder nicht, oder ob es innerhalb eines bestimmten Zeitraums abgelaufen ist, ohne das oben angegebene Datum analysieren zu müssen.

524
that other guy

Wenn Sie nur wissen möchten, ob das Zertifikat abgelaufen ist (oder dies innerhalb der nächsten N Sekunden tun wird), zeigt die Option -checkend <seconds> unter openssl x509 Folgendes an:

if openssl x509 -checkend 86400 -noout -in file.pem
then
  echo "Certificate is good for another day!"
else
  echo "Certificate has expired or will do so within 24 hours!"
  echo "(or is invalid/not found)"
fi

Dies erspart es Ihnen, selbst Datums-/Zeitvergleiche durchzuführen.

openssl gibt den Beendigungscode 0 (Null) zurück, wenn das Zertifikat nicht abgelaufen ist, und tut dies im obigen Beispiel für die nächsten 86400 Sekunden nicht. Wenn das Zertifikat abgelaufen ist oder dies bereits getan hat - oder ein anderer Fehler wie eine ungültige/nicht vorhandene Datei - lautet der Rückkehrcode 1.

(Natürlich wird davon ausgegangen, dass Uhrzeit und Datum korrekt eingestellt sind.)

141
MikeW

Hier ist meine Bash-Befehlszeile, um mehrere Zertifikate in der Reihenfolge ihres Ablaufs aufzulisten, wobei das letzte zuerst abläuft.

for pem in /etc/ssl/certs/*.pem; do 
   printf '%s: %s\n' \
      "$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" \
      "$pem"
done | sort

Beispielausgabe:

2015-12-16: /etc/ssl/certs/Staat_der_Nederlanden_Root_CA.pem
2016-03-22: /etc/ssl/certs/CA_Disig.pem
2016-08-14: /etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_S.pem
17

Hier ist eine Bash-Funktion, die alle Ihre Server überprüft, vorausgesetzt, Sie verwenden DNS Round-Robin. Beachten Sie, dass dies das Datum GNU erfordert und unter Mac OS nicht funktioniert

function check_certs () {
  if [ -z "$1" ]
  then
    echo "domain name missing"
    exit 1
  fi
  name="$1"
  shift

  now_Epoch=$( date +%s )

  Dig +noall +answer $name | while read _ _ _ _ ip;
  do
    echo -n "$ip:"
    expiry_date=$( echo | openssl s_client -showcerts -servername $name -connect $ip:443 2>/dev/null | openssl x509 -inform pem -noout -enddate | cut -d "=" -f 2 )
    echo -n " $expiry_date";
    expiry_Epoch=$( date -d "$expiry_date" +%s )
    expiry_days="$(( ($expiry_Epoch - $now_Epoch) / (3600 * 24) ))"
    echo "    $expiry_days days"
  done
}

Ausgabebeispiel:

$ check_certs stackoverflow.com
151.101.1.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.65.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.129.69: Aug 14 12:00:00 2019 GMT    603 days
151.101.193.69: Aug 14 12:00:00 2019 GMT    603 days
7
Andrew

Für MAC OSX (El Capitan) Diese Modifikation von Nicholas 'Beispiel hat für mich funktioniert.

for pem in /path/to/certs/*.pem; do
    printf '%s: %s\n' \
        "$(date -jf "%b %e %H:%M:%S %Y %Z" "$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" +"%Y-%m-%d")" \
    "$pem";
done | sort

Beispielausgabe:

2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem

macOS hat die Flags --date= oder --iso-8601 auf meinem System nicht gemocht.

2
Donald.M

Eine Zeile prüft auf true/false, wenn das Zertifikat später abgelaufen ist (z. B. 15 Tage):

if openssl x509 -checkend $(( 24*3600*15 )) -noout -in <(openssl s_client -showcerts -connect may.domain.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM)
then
  echo 'good'
else
  echo 'bad'
fi
1
Alexey

Wenn Sie (aus irgendeinem Grund) eine GUI-Anwendung unter Linux verwenden möchten, verwenden Sie gcr-viewer (in den meisten Distributionen wird sie vom Paket gcr installiert (ansonsten im Paket gcr-viewer).

gcr-viewer file.pem
# or
gcr-viewer file.crt
0
Attila123