#!/bin/bash readonly DOMAIN=$1 readonly PROTOCOL=${2:-https} readonly TIMEOUT=10 # max seconds to wait result=0 function usage { echo 'usage: [ https | 443 | smtps | 587 | pop3 | 993 | imap | 995 | ALL ]' exit 1 } function check_ssl { local protocol=$1 case $protocol in SMTPS) local extra="-starttls smtp -showcerts" ;; esac echo -n "$protocol " certificate_info=$(echo | timeout $TIMEOUT openssl s_client $extra -connect $DOMAIN:$2 2>/dev/null) issuer=$(echo "$certificate_info" | openssl x509 -noout -text 2>/dev/null | grep Issuer: | cut -d: -f2) date=$(echo "$certificate_info" | openssl x509 -noout -enddate 2>/dev/null | cut -d'=' -f2) date_s=$(date -d "${date}" +%s) now_s=$(date -d now +%s) date_diff=$(((date_s - now_s) / 86400)) if [[ -z $date ]]; then echo -n "does not respond " echo -ne "\033[31;1m" echo FAILURE ((result += 1)) elif [[ $date_diff -gt 20 ]]; then echo -n "issuer:$issuer " echo -n "will expire in $date_diff days " echo -ne "\033[32;1m" echo ok elif [[ $date_diff -gt 0 ]]; then echo -n "issuer:$issuer " echo -n "will expire in $date_diff days " echo -ne "\033[31;1m" echo WARNING ((result += 1)) else echo -n "issuer:$issuer " echo -n "has already expired $date_diff ago " echo -ne "\033[31;1m" echo FAILURE ((result += 1)) fi echo -ne "\033[0m" } #MAIN [[ -z "$DOMAIN" ]] && usage case $PROTOCOL in https | 443) check_ssl HTTPS 443 ;; smtps | 587) check_ssl SMTPS 587 ;; pop3 | 995) check_ssl POP3 995 ;; imap | 993) check_ssl IMAP 993 ;; all | ALL) check_ssl HTTPS 443 check_ssl SMTPS 587 check_ssl POP3 995 check_ssl IMAP 993 ;; *) usage ;; esac exit "$result"