アイテム
- タイプ:外部チェック
- キー:ssl_cert_check.sh["{HOST.DNS}"]
- 単位:d
トリガー
- 名前:{HOST.NAME}:証明書期限が30日を切りました
- 条件式
{0_SSL:ssl_cert_check.sh["{HOST.DNS}"].nodata(86400)}=1
or {0_SSL:ssl_cert_check.sh["{HOST.DNS}"].last(0)}<30
or {0_SSL:ssl_cert_check.sh["{HOST.DNS}"].count(#2,0)}>1
ssl_cert_check.sh
#!/bin/bash
SERVER=$1
#SERVER="www.domain.com"
PORT=$2
if [ -z ${PORT} ]; then
PORT="443"
fi
ret=`openssl s_client -connect ${SERVER}:${PORT} -servername ${SERVER} < /dev/null 2> /dev/null | openssl x509 -text | grep After`
edate=$(date +%s --date="`echo $ret | sed -e "/Not After/{s/^.* : //;p};d"`")
cdate=$(date +%s)
echo $((($edate - $cdate) / 60 / 60 / 24))
メモ
- -servername ${SERVER} <- SNIでは必須
- テンプレートにすると漏れがない
- これで証明書期限切れ事故が大分減ったと。
ドキュメントルートにある複数サイトをまとめ監視の場合
#!/bin/sh
dir_path="/var/www/html/*"
dirs=`find $dir_path -maxdepth 0 -type d`
for dir in $dirs;
do
domain=${dir:14}
if [[ ! $domain == "z_"* ]] && [ ! $domain = "default" ]; then #監視不用のドメインディレクトリは除外
ret=`openssl s_client -connect ${domain}:443 < /dev/null 2> /dev/null | openssl x509 -text | grep After`
edate=$(date +%s --date="`echo $ret | sed -e "/Not After/{s/^.* : //;p};d"`")
cdate=$(date +%s)
limit=$((($edate - $cdate) / 60 / 60 / 24))
if [ $limit -lt 20 ]; then
echo "${domain}: ${limit} days"
fi
fi
done
-
zabbixのトリガーでは帰り値があるとNGとする
-
上記スクリプトを忘れまたつくちゃった。微妙に違うので追加。
#!/bin/sh
dir_path="/var/www/html/*"
dirs=`find $dir_path -maxdepth 0 -type d`
for dir in $dirs;
do
domain=${dir/.\//}
if [[ "$domain" == "default" ]]; then
continue
fi
ret=`openssl s_client -connect ${domain}:443 -servername ${domain} < /dev/null 2> /dev/null | openssl x509 -text | grep After`
edate=$(date +%s --date="`echo $ret | sed -e "/Not After/{s/^.* : //;p};d"`")
cdate=$(date +%s)
remain=$((($edate - $cdate) / 60 / 60 / 24))
if [ $remain -le 10 ]; then
echo "${domain}, Less than ${remain} days"
fi
done
参考
###追記
スクリプトパラメタにポートを追加
まとめ監視追加