終了日時そのものを見ていると、有効期間が短い証明書では気づくのが遅れます。 90 日の証明書なら「あと 1 ヶ月ある」と思っている間に、実は更新の猶予が ほとんど残っていない、ということが何度かありました。
残り日数で判定するように変えてから、更新漏れがほぼ無くなりました。 シェルで書くとこんな感じです。
end=$(openssl s_client -connect host:443 -servername host </dev/null 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
left=$(( ( $(date -d "$end" +%s) - $(date +%s) ) / 86400 ))
echo "$left"
これを cron で回して、残り 20 日を切ったら通知、という形にしています。 短い有効期間の証明書が増えたので、しきい値はもう少し短くしてもいいかもしれません。
date -d は GNU date の拡張なので、BSD 系だとそのままでは動きません。
自分は Linux しか触らないので気にしていませんが、スクリプトを人に渡すときは
注意が必要だと毎回思います。
あと、openssl s_client は接続先が落ちていると何も返さずに終わるので、
パイプの後段で空文字を掴んで date がエラーになることがあります。
先に [ -n "$end" ] で弾くようにしました。