Skip to content

Instantly share code, notes, and snippets.

@tyru
Last active September 8, 2018 21:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tyru/f9087a5de8b7947a5abb8b945ecde4f0 to your computer and use it in GitHub Desktop.
Save tyru/f9087a5de8b7947a5abb8b945ecde4f0 to your computer and use it in GitHub Desktop.
Check end dates of all installed certificates (Let's Encrypt)
#!/bin/bash
set -u
# /etc/letsencrypt/live/ にインストールされている証明書の有効期限が1つでも報告日を迎えていたら
# 終了コード=0以外で終了し、標準出力に出力する (cron 用)
# 例: 有効期限の終了日=20180929, REPORT_DAYS_AGO=7 の場合 報告日=20180922 となる。
REPORT_DAYS_AGO=${REPORT_DAYS_AGO:-14}
# 2つの日付のシリアル秒の差を求める
compare_date() {
local s1=$(date --date="$1" +%s)
local s2=$(date --date="$2" +%s)
expr "$s1" - "$s2"
}
# シリアル秒を日数に変換
serial_to_days() {
expr "$1" / 60 / 60 / 24
}
exit_code=0
today=$(date +%Y%m%d)
for i in `ls /etc/letsencrypt/live/`; do
cert=/etc/letsencrypt/live/$i/fullchain.pem
limit=$(date --date="$(sudo openssl x509 -in $cert -noout -enddate | cut -d= -f 2)" +"%Y%m%d")
# 文字数が 8 (YYYYMMDD) でなかったらスキップ
[ ${#limit} -eq 8 ] || continue
# 報告日を求める
report_date=$(date --date="$limit $REPORT_DAYS_AGO days ago" +"%Y%m%d")
# 今日から報告日まで残された日数を求める
[ $(compare_date $report_date $today) -le 0 ] || continue
limit_ymd=$(date --date="$limit" +"%Y/%m/%d")
days_left=$(serial_to_days $(compare_date $limit $today))
echo "========== $i =========="
echo "有効期限が $limit_ymd で切れます (残り $days_left 日)"
exit_code=1
done
exit $exit_code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment