Script you can run in a cron
- Several thing of note: when getting the SSL information – you have to echo a “q” because the openssl is interactive.
- To covert from timestamp to formatted date – use the @ symbol
- date -d @$timestamp_item ‘+%Y-%m-%d’
#!/bin/bash TARGET="www.website.net"; RECIPIENT="admin@websit.net"; DAYS=7; echo "checking if $TARGET expires in less than $DAYS days"; ssl_out=$(echo "q" |openssl s_client -connect $TARGET:443 2>/dev/null | openssl x509 -noout -dates); awk_out=$(echo $ssl_out | awk -F'=' '{ print $3 }'); echo "expration date is $awk_out"; expirationdate=$( date -d "$awk_out" '+%s'); in7days=$(($(date +%s) + (86400*$DAYS))); echo "exp: $experationdate"; echo "in7: $in7days"; fmt_exp_date=$(date -d "$awk_out" '+%Y-%m-%d'); echo "7 days, $(date -d @$in7days '+%Y-%m-%d') "; if [ $in7days -gt $expirationdate ]; then echo "here"; echo "KO - Certificate for $TARGET expires in less than $DAYS days, on $(date -d @$expirationdate '+%Y-%m-%d')"; mail -s "Certificate expiration warning for $TARGET, on $fmt_exp_date" $RECIPIENT <<< "Certifcate expiry on $fmt_exp_date " ; else echo "OK - Certificate expires on $fmt_exp_date"; fi;