はじめに
インターネットにサーバを公開している人には、切っても切れないサーバ証明書ですが、契約期間が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=HegeHege@gmail.com
# 検査対象のドメイン名一覧ファイル
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