S openssl
:
openssl x509 -enddate -noout -in file.pem
Výstup je ve tvaru:
notAfter=Nov 3 22:23:50 2014 GMT
Podívejte se také na odpověď MikeW, jak snadno zkontrolovat, zda platnost certifikátu vypršela nebo ne, nebo zda se tak stane během určitého časového období, aniž byste museli analyzovat výše uvedené datum.
Pokud chcete vědět, zda platnost certifikátu vypršela (nebo tak učiní během následujících N sekund), -checkend <seconds>
možnost openssl x509
vám řekne:
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
Díky tomu nemusíte sami provádět porovnávání data a času.
openssl
vrátí návratový kód 0
(nula), pokud platnost certifikátu nevypršela a nebude tak činit dalších 86 400 sekund, ve výše uvedeném příkladu. Pokud platnost certifikátu vypršela nebo už tak učinila – nebo došlo k jiné chybě, jako je neplatný/neexistující soubor – návratový kód je 1
.
(Samozřejmě předpokládá, že je správně nastaven čas/datum)
Uvědomte si, že starší verze openssl mají chybu, což znamená, že pokud je čas uvedený v checkend
je příliš velký, vždy se vrátí 0 (https://github.com/openssl/openssl/issues/6180).
Zde je můj příkazový řádek bash pro seznam více certifikátů v pořadí podle jejich vypršení platnosti, přičemž poslední vyprší jako první.
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
Ukázkový výstup:
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