サーバ群のサーバ証明書の失効期限を自動でチェック+メールする


はじめに

 インターネットにサーバを公開している人には、切っても切れないサーバ証明書ですが、契約期間が1年毎になったり、Let's encryptだと3か月毎とか、有効期限が短くなり管理の手間が増えて困ります。今はまだ、有償のサーバ証明書も2年または3年の有効期間の箇所のサーバもあったりしますので、更新の申請漏れに関しては注意しないといけません。

ここに記録する記事の内容について

 管理対象の複数のサーバの有効期限を自動で確認して、残りが2週間と1週間を切ったら毎日メールを管理者に通知するShellを記載します。
 Let's encryptなどは、サーバ証明書の自動更新をShellで実施していますが、時々失敗することもあるので、更新日の把握は大切です。

ドメイン一覧ファイルの書式

管理対象のドメインをdomain.lstに記載します。

下記はサンプルです。先頭行に#はコメント行となります。

domain.lst
#commment.com 
www.kantei.go.jp
www.mod.go.jp

検査用のShellの中身

check_ssl.sh
#! /bin/bash
# -checkend  期限切れまでの秒数
#  [2592000](=30日×24時間×60分×60秒)
#  [1209600](=14日×24時間×60分×60秒)
#  [604800](= 7日×24時間×60分×60秒)

# 期限切れの時にメールを送信する宛先
MAIL_TO=[email protected]
# 検査対象のドメイン名一覧ファイル
LIST_FILE=/root/LIST/domain.lst

touch /tmp/crept_date.txt

for DOMAIN in `cat  ${LIST_FILE}| grep -v "^#"`
do
  Val=`openssl s_client -connect $DOMAIN:443  -servername $DOMAIN < /dev/null 2> /dev/null | openssl x509 -checkend 604800 | grep "not" | wc -l`
  if [ "$Val" = "0" ];
  then
        echo "$DOMAINのサーバ証明書は約1週間後に無効となります。" >> /tmp/crept_date.txt
  else
     Val=`openssl s_client -connect $DOMAIN:443  -servername $DOMAIN < /dev/null 2> /dev/null | openssl x509  -checkend 1209600 | grep "not" | wc -l`
     if [ "$Val" = "0" ];
     then
        echo "$DOMAINのサーバ証明書は約2週間後に無効となります。" >> /tmp/crept_date.txt
     fi
  fi
done

Val=`cat /tmp/crept_date.txt | wc -l`
if [ "$Val" != "0" ];
then
 mailx -s "サーバ証明書期限切れ情報" ${MAIL_TO}  < /tmp/crept_date.txt
fi
\rm -f /tmp/crept_date.txt

cronにShellを追加

月曜、水曜、金曜の朝8時にサーバ証明書期限切れを調べる。
下記をcrontab -e コマンドで追加する。

00 08 * * 1,3,5 sh /root/bin/check_ssl.sh