Con openssl
:
openssl x509 -enddate -noout -in file.pem
La salida está en el formulario:
notAfter=Nov 3 22:23:50 2014 GMT
Consulte también la respuesta de MikeW sobre cómo comprobar fácilmente si el certificado ha caducado o no, o si lo hará dentro de un período de tiempo determinado, sin tener que analizar la fecha anterior.
Si solo desea saber si el certificado ha caducado (o lo hará en los próximos N segundos), el -checkend <seconds>
opción a openssl x509
te 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
Esto ahorra tener que hacer comparaciones de fecha/hora usted mismo.
openssl
devolverá un código de salida de 0
(cero) si el certificado no ha caducado y no lo hará durante los próximos 86400 segundos, en el ejemplo anterior. Si el certificado habrá caducado o ya lo ha hecho, o algún otro error como un archivo no válido o inexistente, el código de retorno es 1
.
(Por supuesto, se supone que la fecha y la hora están configuradas correctamente)
Tenga en cuenta que las versiones anteriores de openssl tienen un error, lo que significa que si el tiempo especificado en checkend
es demasiado grande, siempre se devolverá 0 (https://github.com/openssl/openssl/issues/6180).
Aquí está mi línea de comando bash para enumerar varios certificados en orden de vencimiento, el más reciente que expira primero.
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
Salida de muestra:
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