Con openssl
:
openssl x509 -enddate -noout -in file.pem
L'output è nel formato:
notAfter=Nov 3 22:23:50 2014 GMT
Vedi anche la risposta di MikeW su come verificare facilmente se il certificato è scaduto o meno, o se lo sarà entro un certo periodo di tempo, senza dover analizzare la data sopra.
Se vuoi solo sapere se il certificato è scaduto (o se lo farà entro i prossimi N secondi), il -checkend <seconds>
opzione a openssl x509
ti dirà:
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
Questo evita di dover fare tu stesso confronti di data/ora.
openssl
restituirà un codice di uscita di 0
(zero) se il certificato non è scaduto e non lo farà per i successivi 86400 secondi, nell'esempio precedente. Se il certificato sarà scaduto o lo è già stato - o qualche altro errore come un file non valido/inesistente - il codice di ritorno è 1
.
(Naturalmente, presuppone che l'ora/la data siano impostate correttamente)
Tieni presente che le versioni precedenti di openssl hanno un bug, il che significa che se il tempo specificato in checkend
è troppo grande, verrà sempre restituito 0 (https://github.com/openssl/openssl/issues/6180).
Ecco la mia riga di comando bash per elencare più certificati in ordine di scadenza, il più recente in scadenza per primo.
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
Esempio di output:
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