Add first release of plugin
This commit is contained in:
parent
387cfdd44d
commit
6b26e90788
1 changed files with 135 additions and 0 deletions
135
check_ssl_cert_file
Executable file
135
check_ssl_cert_file
Executable file
|
@ -0,0 +1,135 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Icinga/Nagios plugin to check X509 SSL certificate expiration date
|
||||||
|
# using OpenSSL.
|
||||||
|
#
|
||||||
|
# Usage: check_ssl_cert_file [options]
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Benjamin Renard <brenard@easter-eggs.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License version 3
|
||||||
|
# as published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
DEBUG=0
|
||||||
|
FILE=""
|
||||||
|
WARN_LIMIT_DAYS=5
|
||||||
|
CRIT_LIMIT_DAYS=3
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "Usage : $0 [cert file path]
|
||||||
|
-f [file] Specify certificate file path
|
||||||
|
-w [integer] Specify warning days limit
|
||||||
|
-c [integer] Specify critial days limit
|
||||||
|
-d Enable debug mode
|
||||||
|
-h Show this message"
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_int() {
|
||||||
|
echo "$1"|grep -c '^[0-9]\+$'
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts "f:w:c:dh-:" OPTION
|
||||||
|
do
|
||||||
|
case "$OPTION" in
|
||||||
|
w)
|
||||||
|
WARN_LIMIT_DAYS="${OPTARG}"
|
||||||
|
[ $( check_int "$WARN_LIMIT_DAYS" ) -ne 1 ] && echo "UNKNOWN : Invalid -w parameter" && exit 3
|
||||||
|
;;
|
||||||
|
c)
|
||||||
|
CRIT_LIMIT_DAYS="${OPTARG}"
|
||||||
|
[ $( check_int "$CRIT_LIMIT_DAYS" ) -ne 1 ] && echo "UNKNOWN : Invalid -c parameter" && exit 3
|
||||||
|
;;
|
||||||
|
f)
|
||||||
|
FILE="${OPTARG}"
|
||||||
|
[ ! -e "$FILE" ] && echo "UNKNOWN : Invalid cert file path" && exit 3
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
DEBUG=1
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid parameter -$OPTION"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -z "$FILE" ] && usage && exit 3
|
||||||
|
|
||||||
|
let WARN_LIMIT=24*3600*WARN_LIMIT_DAYS
|
||||||
|
let CRIT_LIMIT=24*3600*CRIT_LIMIT_DAYS
|
||||||
|
|
||||||
|
|
||||||
|
OSSL_OUT=$( openssl x509 -text -noout -in "$FILE" 2> /dev/null )
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "UNKNOWN : Fail to read certificate file with openssl"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ $DEBUG -eq 1 ] && echo -e "OpenSSL output : $OSSL_OUT"
|
||||||
|
|
||||||
|
NOT_AFTER=$( echo -e "$OSSL_OUT"| grep 'Not After : '|sed 's/^.*Not After : //' )
|
||||||
|
if [ -z "$NOT_AFTER" ]
|
||||||
|
then
|
||||||
|
echo "UNKNOWN : Fail to detect expiration date in OpenSSL output"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ $DEBUG -eq 1 ] && echo -e "Expiration date : $NOT_AFTER"
|
||||||
|
|
||||||
|
NOT_AFTER_TIME=$( date +%s -d "$NOT_AFTER" )
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "UNKNOWN : Fail to convert expiration date to timestamp"
|
||||||
|
echo "Expiration date : $NOT_AFTER"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ $DEBUG -eq 1 ] && echo -e "Expiration timestamp : $NOT_AFTER_TIME"
|
||||||
|
|
||||||
|
CUR_TIME=$( date +%s )
|
||||||
|
|
||||||
|
[ $DEBUG -eq 1 ] && echo -e "Current timestamp : $CUR_TIME"
|
||||||
|
|
||||||
|
if [ $CUR_TIME -ge $NOT_AFTER_TIME ]
|
||||||
|
then
|
||||||
|
echo "CRITICAL : Certificate file expiry since $NOT_AFTER"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
let DIFF=NOT_AFTER_TIME-CUR_TIME
|
||||||
|
|
||||||
|
[ $DEBUG -eq 1 ] && echo -e "Diff time in seconds : $DIFF\nCritical/Warning limits : $CRIT_LIMIT / $WARN_LIMIT"
|
||||||
|
|
||||||
|
if [ $DIFF -le $CRIT_LIMIT ]
|
||||||
|
then
|
||||||
|
echo "CRITICAL : Certificate file expiry in less than $CRIT_LIMIT_DAYS day(s)"
|
||||||
|
echo "Expiration date : $NOT_AFTER"
|
||||||
|
exit 2
|
||||||
|
elif [ $DIFF -le $WARN_LIMIT ]
|
||||||
|
then
|
||||||
|
echo "WARNING : Certificate file expiry in less than $WARN_LIMIT_DAYS day(s)"
|
||||||
|
echo "Expiration date : $NOT_AFTER"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK : Certificate file expiry on $NOT_AFTER"
|
||||||
|
exit 0
|
||||||
|
fi
|
Loading…
Reference in a new issue