Avec openssl
:
openssl x509 -enddate -noout -in file.pem
La sortie est sur le formulaire :
notAfter=Nov 3 22:23:50 2014 GMT
Voir également la réponse de MikeW pour savoir comment vérifier facilement si le certificat a expiré ou non, ou s'il le sera dans un certain délai, sans avoir à analyser la date ci-dessus.
Si vous voulez juste savoir si le certificat a expiré (ou le fera dans les N prochaines secondes), le -checkend <seconds>
option à openssl x509
vous dira :
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
Cela évite d'avoir à faire soi-même des comparaisons date/heure.
openssl
renverra un code de sortie de 0
(zéro) si le certificat n'a pas expiré et ne le fera pas pendant les prochaines 86400 secondes, dans l'exemple ci-dessus. Si le certificat a expiré ou l'a déjà fait - ou une autre erreur comme un fichier invalide/inexistant - le code de retour est 1
.
(Bien sûr, cela suppose que l'heure/la date sont correctement réglées)
Sachez que les anciennes versions d'openssl ont un bogue qui signifie que si l'heure spécifiée dans checkend
est trop grand, 0 sera toujours renvoyé (https://github.com/openssl/openssl/issues/6180).
Voici ma ligne de commande bash pour répertorier plusieurs certificats par ordre d'expiration, le plus récent expirant en premier.
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
Exemple de sortie :
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