Risposte:
Con openssl:
openssl x509 -enddate -noout -in file.pem
L'output è nel modulo:
notAfter=Nov 3 22:23:50 2014 GMT
Vedi anche la risposta di MikeW su come controllare facilmente se il certificato è scaduto o meno, o se lo farà entro un certo periodo di tempo, senza dover analizzare la data sopra.
Se vuoi solo sapere se il certificato è scaduto (o lo farà entro i prossimi N secondi), l' -checkend <seconds>opzione per openssl x509dirti:
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
Ciò consente di evitare di dover confrontare personalmente data / ora.
opensslrestituirà un codice di uscita di 0(zero) se il certificato non è scaduto e non lo farà per i successivi 86400 secondi, nell'esempio sopra. Se il certificato è scaduto o lo ha già fatto - 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)
-nooutopzione per visualizzare un messaggio utile utilizzando un singolo comando senza ulteriore logica. Ad esempio, openssl x509 -checkend 0 -in file.pemdarà l'output "Il certificato scadrà" o "Il certificato non scadrà" indicando se il certificato scadrà tra zero secondi.
Ecco la mia riga di comando bash per elencare più certificati in ordine di scadenza, con la scadenza più recente per prima.
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
Uscita campione:
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
Ecco una funzione bash che controlla tutti i tuoi server, supponendo che tu stia utilizzando il round robin DNS. Nota che questo richiede la data GNU e non funzionerà su Mac OS
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
}
Esempio di output:
$ 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_datevalore dovrà avere il nome del fuso orario rimosso dalla fine di esso. Aggiungi un ulteriore cutalla fine del tubo per fare questo:| cut -d ' ' -f 1-4
Una riga verifica su vero / falso se il certificato di dominio scadrà dopo qualche tempo (es. 15 giorni):
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
Per MAC OSX (El Capitan) Questa modifica dell'esempio di Nicholas ha funzionato per me.
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
Uscita campione:
2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem
macOS non ha gradito i flag --date=o --iso-8601sul mio sistema.
.cercertificati che hai appena creato e scaricato dal sito Apple Dev?
Come la risposta accettata, ma nota che funziona anche con .crtfile e non solo .pemfile, nel caso in cui non riesci a trovare la .pemposizione del file.
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
Risultato:
notAfter=Mar 29 06:15:00 2020 GMT
-startdatee-enddateintegratex509nell'utilità. Ti salveranno ilgrep.