Edited at

SSL証明書の有効期限を確認するスクリプト

More than 3 years have passed since last update.

openssl コマンドを使うと証明書の情報が取得できるので、証明書の有効期限のチェックを行うスクリプトを書きました。

#!/bin/bash

## validate_certs - Check SSL certificate expiration date

WARN_DAYS=30
TARGETS=(
"secure.example.com"
)

function show_enddate()
{
echo "" | openssl s_client -connect $1:443 2> /dev/null | openssl x509 -enddate -noout | sed 's/notAfter\=//'
}

echo "SSL Certificate Expiration Checking ($(date -R))"
echo

i_now=$(date "+%Y%m%d%H%M%S")
i_warn=$(date -d "$WARN_DAYS days" "+%Y%m%d%H%M%S")
for host in ${TARGETS[@]}; do
enddate=$(LANG=C date -d"$(show_enddate $host)")
i_enddate=$(date -d"$enddate" "+%Y%m%d%H%M%S")
if [ $i_now -ge $i_enddate ]; then
echo "[SEVERE] \`$host' already expired on $enddate"
elif [ $i_warn -ge $i_enddate ]; then
echo "[WARN] \`$host' will expire on $enddate"
fi
done

echo
echo
"EOF"

変数 TARGETS に監視するドメイン名を列挙しておきます。

有効期限までの日数が変数 WARN_DAYS よりも小さい場合、画面にそのドメインを [WARN] というメッセージとともに出力します。ちなみに有効期限を過ぎてしまっているドメイン名は [SEVERE] というメッセージになります。

このスクリプトの出力をメールで送信するように cron に登録しておくと証明書の更新忘れがなくなる、かも。