check_cert_starttls 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/bin/bash
  2. hostip=$1
  3. port=$2
  4. warn_days=$3
  5. crit_days=$4
  6. [ -z "${crit_days}" ] && crit_days=3
  7. [ -z "${warn_days}" ] && warn_days=10
  8. now=`date +%s`
  9. CERT_TXT=$(echo "QUIT" | LANG=C openssl s_client -min_protocol SSLv3 -starttls smtp -connect ${hostip}:${port} 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | openssl x509 -text -noout)
  10. NAME=$(echo "$CERT_TXT" | grep "Subject: OU=Domain Control Validated" | awk '{ print $NF }' | sed 's/CN=//')
  11. TIMESTAMP=$(echo "$CERT_TXT" | grep "Not After" | sed -r 's/\s+Not After\s+\://')
  12. expire_time=$(date +%s -d "${TIMESTAMP}")
  13. [ -z "${expire_time}" ] && expire_time=22394880000
  14. SEC_DIFF=$(( $expire_time - $now ))
  15. DAYS_DIFF=$(( $SEC_DIFF / 86400 ))
  16. if [ $expire_time -le $now ]; then
  17. echo "CRIT! Expired cert ${NAME}"
  18. exit 2
  19. fi
  20. if [ $DAYS_DIFF -le $crit_days ]; then
  21. echo "CRIT! Soon we will lose the certificate ${NAME} - only $DAYS_DIFF days left"
  22. exit 2
  23. fi
  24. if [ $DAYS_DIFF -le $warn_days ]; then
  25. echo "WARN! we need to update the certificate ${NAME} - only $DAYS_DIFF days left"
  26. exit 1
  27. fi
  28. echo "OK! $DAYS_DIFF days left for ${NAME}"
  29. exit 0