Antworten:
Mit openssl
:
openssl x509 -enddate -noout -in file.pem
Die Ausgabe erfolgt auf dem Formular:
notAfter=Nov 3 22:23:50 2014 GMT
Siehe auch MikeW Antwort dafür , wie leicht zu überprüfen , ob das Zertifikat abgelaufen ist oder nicht, oder ob sie in einem bestimmten Zeitraum, ohne dass das oben genannte Datum zu analysieren.
Wenn Sie nur wissen möchten, ob das Zertifikat abgelaufen ist (oder dies innerhalb der nächsten N Sekunden tun wird), können Sie mit der folgenden -checkend <seconds>
Option openssl x509
Folgendes mitteilen:
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, Datums- / Zeitvergleiche selbst durchführen zu müssen.
openssl
gibt einen Exit-Code von 0
(Null) zurück, wenn das Zertifikat nicht abgelaufen ist und dies für die nächsten 86400 Sekunden im obigen Beispiel nicht tun wird. 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 / Datum korrekt eingestellt sind.)
-noout
Option aus, um eine hilfreiche Nachricht mit einem einzigen Befehl ohne zusätzliche Logik anzuzeigen. Gibt beispielsweise openssl x509 -checkend 0 -in file.pem
die Ausgabe "Zertifikat läuft ab" oder "Zertifikat läuft nicht ab" aus und gibt an, ob das Zertifikat in null Sekunden abläuft.
Hier ist meine Bash-Befehlszeile, um mehrere Zertifikate in der Reihenfolge ihres Ablaufs aufzulisten, die zuletzt 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
0 7 * * 1 /path/to/cert.sh | mail -s "certbot" my@email.com
Hier ist eine Bash-Funktion, die alle Ihre Server überprüft, vorausgesetzt, Sie verwenden DNS-Round-Robin. Beachten Sie, dass dies ein GNU-Datum 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
expiry_date
Wert der Zeitzonenname am Ende entfernt werden. Fügen Sie cut
dazu am Ende der Pipe eine zusätzliche hinzu :| cut -d ' ' -f 1-4
Eine Zeile prüft auf wahr / falsch, ob das Domain-Zertifikat einige Zeit später (z. B. 15 Tage) abgelaufen ist:
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
Für MAC OSX (El Capitan) Diese Modifikation von Nicholas 'Beispiel hat bei mir 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 mochte das nicht --date=
oder --iso-8601
Flags auf meinem System nicht.
.cer
Zertifikate hätten, die Sie gerade erstellt und von der Apple Dev-Website heruntergeladen haben?
Entspricht der akzeptierten Antwort. Beachten Sie jedoch, dass dies auch mit .crt
Dateien und nicht nur mit Dateien funktioniert .pem
, nur für den Fall, dass Sie den .pem
Speicherort der Datei nicht finden können .
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
Ergebnis:
notAfter=Mar 29 06:15:00 2020 GMT
-startdate
und-enddate
Optionen in das eingebautex509
Dienstprogramm. Sie werden dir das rettengrep
.