TLS証明書の期限切れチェック
Webサイトのhttps化をGoogleが推奨したこともあり、httpsで運用しているサイトも以前に較べ多くなりました。多くのサイトを運用している会社などでは、それだけ扱うTLS証明書の数も増えるため、それらが期限切れにならないよう管理するのが大変になってきたようにみえます。
実際、お客様で管理しているサーバーでうっかり期限切れになってしまい、急いで証明書を更新したいという依頼が来ることもたまにあります。
私も自社のサーバーやお客様のサーバーなど複数のサーバーを管理していますが、お客様の環境によって自動更新しているもの/していないもの、有効期限が近くなると通知を送ってくるもの/来ないもの等、さまざまなものがあるので、以下のような簡単なスクリプトでまとめてチェックをしています。
証明書期限チェックスクリプト
#!/bin/sh
TARGETS="www.bit-hive.com:443 wiki.bit-hive.com:443"
CHECKEND=2592000 # 30 days
EMAIL="xxxx@yyyyyy"
notify()
{
to=$1
host=$2
echo "$host certificate will expire." | mail -s "TLS Certificate will expire" $to
}
for target in $TARGETS; do
echo $target
host=`echo $target | sed -e 's/^\(.*\):\([0-9]\+\)$/\1/'`
port=`echo $target | sed -e 's/^\(.*\):\([0-9]\+\)$/\2/'`
openssl s_client -connect $host:$port < /dev/null 2>/dev/null | openssl x509 -checkend $CHECKEND
ret=$?
if [ $ret != 0 ] ; then
notify $EMAIL $host
fi
done
使い方としては、TARGETSにチェック対象のホストの一覧を指定、CHECKENDに期限切れまでの秒数を指定します。期限切れまでCHECKEND秒を切っているならEMAILで指定したアドレスにメールを送信します。
実行結果例
www.bit-hive.com:443 Certificate will expire wiki.bit-hive.com:443 Certificate will not expire
サーバー上のTLS証明書を取得して有効期限をチェックするので、各サーバーごとにスクリプトを設置するのではなく、一台のホストからの実行でまとめてチェックできます。このスクリプトをcronで定期的に実行しておけば楽に期限切れチェックを行うことができます。
パイプ周りのエラー処理が完全ではないので、ホストに接続できなかったようなケースでも通知メールが出てしまいますが、実用上は問題ないでしょう。
投稿日:2020/04/02 14:43
タグ: Server