[Zabbix]SSLサーバ証明書期限切れ○日前チェックをする


これはQiita:Teamからの転載です。

参考および同じようなことをされていたエントリ

前提

  • サーバ証明書の有効期限が切れる○日前にZabbixからアラートがあがる と嬉しい
  • いま○日前か をZabbixが把握する必要はない
  • 有効期限切れまで○日前を切ったことを知れる のが重要

上記前提に基づいている

Zabbix Userparameter で以下を設定

  • ワンライナーで完結するようした
/etc/zabbix/zabbix_agentd.d/userparameter_sslcertificatecheck.conf
UserParameter=sslcert.notaftercheck[*],echo $$(( $$(date -d "$$(openssl s_client -connect $1:$2 -servername $1 < /dev/null 2> /dev/null |openssl x509 -text |grep 'Not After' | cut -d':' -f 2-)" +'%Y%m%d') > $$(date -d "$3 days" +'%Y%m%d') ))
sslcert.notaftercheck[*] []の中にカンマ区切りで引数設定可能
$1 []内引数の1番目 確認したい証明書が設置されているFQDN1
$2 []内引数の2番目 4432
$3 []内引数の3番目 60 とか 30 とか3
$$ ワンライナー実行時に $ になる $$(command) -> $(command)
やってることはこういうことです
#!/bin/bash

FQDN=subdomain.example.com
HTTPSPORT=443
DAY=30        # この場合30日前check

DOLLAR_1=${FQDN}
DOLLAR_2=${HTTPSPORT}
DOLLAR_3=${DAY}

NOTAFTER_YYYYMMDD=$(date -d "$(openssl s_client -connect ${DOLLAR_1}:${DOLLAR_2} -servername ${DOLLAR_1} < /dev/null 2> /dev/null |
                               openssl x509 -text                                                                                 |
                               grep 'Not After'                                                                                   |
                               cut -d':' -f 2-)"   +'%Y%m%d') 
N_DAYS_LATER_YYYYMMDD=$(date -d "${DOLLAR_3} days" +'%Y%m%d') # この場合実行日から30日後の日付
echo  ${NOTAFTER_YYYYMMDD} \> ${N_DAYS_LATER_YYYYMMDD}
echo $(( ${NOTAFTER_YYYYMMDD} > ${N_DAYS_LATER_YYYYMMDD} ))   # 偽なら0が返る前提なのでZabbixのトリガーは0を待ち構える形
output
20160908 > 20160703
1

  1. *.example.com の証明書確認なら実際のサーバで使用している subdomain.example.com を指定する、のような使い分け 

  2. HTTPS通信が可能ならば 443 の限りではない 

  3. 期限切れまで残り 60 or 30 日未満 になったらzabbixは echo 出力から 0 を受け取りアラートメール発報させることを想定