add check_https_valid, adjust executable
This commit is contained in:
parent
dafd6236bc
commit
28909ae35f
|
@ -0,0 +1,91 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
while getopts ":u:" opt; do
|
||||||
|
case $opt in
|
||||||
|
u)
|
||||||
|
url="$OPTARG"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Invalid option: -$OPTARG" >&2
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "Option -$OPTARG requires an argument." >&2
|
||||||
|
exit 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$url" ]; then
|
||||||
|
echo "UNKNOWN - URL not specified. Use the -u option to provide a URL."
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the URL starts with "https://"
|
||||||
|
if [[ "$url" != "https://"* ]]; then
|
||||||
|
echo "UNKNOWN - Invalid URL. The URL must start with 'https://'."
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the hostname and port from the URL
|
||||||
|
hostname=$(echo "$url" | awk -F[/:] '{print $4}')
|
||||||
|
port=$(echo "$url" | awk -F[/:] '{print $5}')
|
||||||
|
|
||||||
|
if [ -z "$port" ]; then
|
||||||
|
port=443
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check SSL certificate validity
|
||||||
|
ssl_output=$(curl -sSI --stderr - "$url" 2>&1)
|
||||||
|
curl_exit_code=$?
|
||||||
|
|
||||||
|
if [ $curl_exit_code -ne 0 ]; then
|
||||||
|
case $curl_exit_code in
|
||||||
|
6)
|
||||||
|
MSG="Could not resolve host for $url"
|
||||||
|
;;
|
||||||
|
7)
|
||||||
|
MSG="Failed to connect to $url"
|
||||||
|
;;
|
||||||
|
35)
|
||||||
|
MSG="SSL connect error for $url"
|
||||||
|
;;
|
||||||
|
51)
|
||||||
|
MSG="SSL certificate verification failed for $url"
|
||||||
|
;;
|
||||||
|
60)
|
||||||
|
MSG="SSL certificate cannot be authenticated with known CA certificates for $url"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
MSG="curl request failed with exit code $curl_exit_code for $url"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "CRITICAL - $MSG"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check SSL certificate expiration date
|
||||||
|
expiration_date=$(echo | openssl s_client -servername "$hostname" -connect "$hostname:$port" 2>/dev/null | openssl x509 -noout -enddate | cut -d "=" -f 2)
|
||||||
|
|
||||||
|
if [ -z "$expiration_date" ]; then
|
||||||
|
echo "UNKNOWN - Failed to retrieve SSL certificate expiration date for $url"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
expiration_timestamp=$(date -d "$expiration_date" +%s)
|
||||||
|
current_timestamp=$(date +%s)
|
||||||
|
|
||||||
|
if [ $expiration_timestamp -lt $current_timestamp ]; then
|
||||||
|
echo "CRITICAL - SSL certificate for $url has expired on $(date -d @$expiration_timestamp)"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
days_remaining=$((($expiration_timestamp - $current_timestamp) / (60*60*24)))
|
||||||
|
|
||||||
|
if [ $days_remaining -lt 30 ]; then
|
||||||
|
echo "WARNING - SSL certificate for $url is expiring on $(date -d @$expiration_timestamp) ($days_remaining days remaining)"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK - SSL certificate for $url is valid"
|
||||||
|
exit 0
|
||||||
|
fi
|
Loading…
Reference in New Issue