Yanıtlar:
İle openssl
:
openssl x509 -enddate -noout -in file.pem
Çıktı şu şekildedir:
notAfter=Nov 3 22:23:50 2014 GMT
Ayrıca , yukarıdaki tarihi ayrıştırmak zorunda kalmadan sertifikanın süresinin dolup dolmadığını veya belirli bir zaman dilimi içinde olup olmayacağını kolayca kontrol etmek için MikeW'nin cevabına bakın .
Sadece sertifikasının süresi doldu (veya bir sonraki N saniye içinde bunu yapacaktır) olmadığını bilmek istiyorsanız, -checkend <seconds>
seçenek için openssl x509
size söyleyecektir:
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
Bu tarih / saat karşılaştırmaları yapmak zorunda kalmazsınız.
openssl
0
sertifikanın süresi dolmamışsa ve sonraki 86400 saniye boyunca bunu yapmayacaksa, yukarıdaki örnekte (sıfır) çıkış kodu döndürür . Sertifikanın süresi dolduysa veya zaten yapmışsa - veya geçersiz / var olmayan bir dosya gibi başka bir hata varsa - dönüş kodu 1
.
(Tabii ki, saat / tarihin doğru ayarlandığını varsayar)
-noout
Ekstra mantık olmadan tek bir komut kullanarak yararlı bir mesaj görme seçeneğini atlayın . Örneğin, openssl x509 -checkend 0 -in file.pem
"Sertifikanın süresi doluyor" veya sertifikanın süresinin dolup dolmayacağını belirten "Sertifikanın süresi dolmayacak" çıktısı verilir.
Burada, en son önce süresi dolan birden fazla sertifikayı sona erme sırasına göre listelemek için bash komut satırım var.
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
Örnek çıktı:
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
İşte DNS round-robin kullandığınızı varsayarsak, tüm sunucularınızı kontrol eden bir bash işlevi. Bunun GNU tarihi gerektirdiğini ve Mac OS'de çalışmadığını unutmayın
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
}
Çıktı örneği:
$ 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_date
değerinizin saat dilimi adının sonuna kaldırılması gerekir. cut
Bunu yapmak için borunun sonuna bir ilave ekleyin :| cut -d ' ' -f 1-4
Alan adı sertifikasının süresi bir süre sonra dolarsa doğru / yanlış değerini kontrol eden bir satır (ör. 15 gün):
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
MAC OSX (El Capitan) için Nicholas örneğinin bu modifikasyonu benim için çalıştı.
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
Örnek Çıktı:
2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem
macOS sistemimdeki --date=
veya --iso-8601
bayraklarından hoşlanmadı .
.cer
Apple Dev sitesinden yeni oluşturduğunuz ve indirdiğiniz sertifikalarınız olsaydı bunu nasıl yapardınız ?
Kabul edilen cevapla aynı, ancak dosya konumunu bulamıyorsanız, sadece dosyayla .crt
değil , dosyayla bile çalıştığını unutmayın ..pem
.pem
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
Sonuç:
notAfter=Mar 29 06:15:00 2020 GMT
-startdate
ve-enddate
seçenekleri de vardırx509
. Onlar seni kurtaracakgrep
.