Mit openssl
:
openssl x509 -enddate -noout -in file.pem
Die Ausgabe erfolgt in der Form:
notAfter=Nov 3 22:23:50 2014 GMT
Sehen Sie sich auch die Antwort von MikeW an, wie Sie einfach überprüfen können, ob das Zertifikat abgelaufen ist oder nicht, oder ob es innerhalb eines bestimmten Zeitraums ablaufen wird, ohne das obige Datum analysieren zu müssen.
Wenn Sie nur wissen möchten, ob das Zertifikat abgelaufen ist (oder dies innerhalb der nächsten N Sekunden tun wird), geben Sie -checkend <seconds>
Option auf openssl x509
wird Ihnen sagen:
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 den Datums-/Uhrzeitabgleich selbst.
openssl
gibt einen Exit-Code von 0
zurück (Null), wenn das Zertifikat nicht abgelaufen ist und dies im obigen Beispiel für die nächsten 86400 Sekunden nicht tun wird. Wenn das Zertifikat abgelaufen sein wird oder bereits abgelaufen ist - oder ein anderer Fehler wie eine ungültige/nicht vorhandene Datei - ist der Rückgabecode 1
.
(Natürlich wird davon ausgegangen, dass Uhrzeit/Datum richtig eingestellt sind)
Beachten Sie, dass ältere Versionen von openssl einen Fehler haben, was bedeutet, dass die in checkend
angegebene Zeit zu groß ist, wird immer 0 zurückgegeben (https://github.com/openssl/openssl/issues/6180).
Hier ist meine Bash-Befehlszeile, um mehrere Zertifikate in der Reihenfolge ihres Ablaufs aufzulisten, wobei das neueste 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