Jawaban:
dengan openssl
:
openssl x509 -enddate -noout -in file.pem
Outputnya ada di formulir:
notAfter=Nov 3 22:23:50 2014 GMT
Lihat juga jawaban MikeW untuk cara memeriksa dengan mudah apakah sertifikat telah kedaluwarsa atau belum, atau apakah akan dalam jangka waktu tertentu, tanpa harus menguraikan tanggal di atas.
Jika Anda hanya ingin tahu apakah sertifikat telah kedaluwarsa (atau akan melakukannya dalam N detik berikutnya), -checkend <seconds>
opsi untuk openssl x509
akan memberi tahu Anda:
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
Ini menghemat harus melakukan perbandingan tanggal / waktu sendiri.
openssl
akan mengembalikan kode keluar 0
(nol) jika sertifikat belum kedaluwarsa dan tidak akan melakukannya untuk 86400 detik berikutnya, dalam contoh di atas. Jika sertifikat telah kedaluwarsa atau sudah melakukannya - atau kesalahan lain seperti file tidak valid / tidak ada - kode pengembaliannya 1
.
(Tentu saja, ini mengasumsikan waktu / tanggal diatur dengan benar)
-noout
opsi untuk melihat pesan bermanfaat menggunakan satu perintah tanpa logika tambahan. Misalnya, openssl x509 -checkend 0 -in file.pem
akan memberikan output "Sertifikat akan kedaluwarsa" atau "Sertifikat tidak akan kedaluwarsa" yang menunjukkan apakah sertifikat akan kedaluwarsa dalam nol detik.
Inilah baris perintah bash saya untuk mencantumkan beberapa sertifikat agar kedaluwarsa, yang paling baru kedaluwarsa terlebih dahulu.
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
Output sampel:
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
Inilah fungsi bash yang memeriksa semua server Anda, dengan asumsi Anda menggunakan DNS round-robin. Perhatikan bahwa ini memerlukan tanggal GNU dan tidak akan berfungsi di 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
}
Contoh keluaran:
$ 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
nilai Anda perlu menghapus nama zona waktu dari ujungnya. Tambahkan tambahan cut
ke ujung pipa untuk melakukan ini:| cut -d ' ' -f 1-4
Satu baris memeriksa benar / salah jika sertifikat domain akan kedaluwarsa dalam beberapa waktu kemudian (mis. 15 hari):
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
Untuk MAC OSX (El Capitan) Modifikasi contoh Nicholas ini bekerja untuk saya.
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
Output sampel:
2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem
macOS tidak suka --date=
atau --iso-8601
menandai pada sistem saya.
.cer
sertifikat yang baru saja Anda buat dan unduh dari situs Apple Dev?
Sama seperti jawaban yang diterima, Tetapi perhatikan bahwa ia berfungsi bahkan dengan .crt
file dan bukan hanya .pem
file, untuk berjaga-jaga jika Anda tidak dapat menemukan .pem
lokasi file.
openssl x509 -enddate -noout -in e71c8ea7fa97ad6c.crt
Hasil:
notAfter=Mar 29 06:15:00 2020 GMT
-startdate
dan-enddate
dibangun ke dalamx509
utilitas. Mereka akan menyelamatkan Andagrep
.