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


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 に登録しておくと証明書の更新忘れがなくなる、かも。