Last active
September 8, 2018 21:25
-
-
Save tyru/f9087a5de8b7947a5abb8b945ecde4f0 to your computer and use it in GitHub Desktop.
Check end dates of all installed certificates (Let's Encrypt)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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