Skip to content

Let's Encrypt の証明書を自動更新する+有効期間をメール通知する

Let's Encrypt で取得した証明書の有効期限は 90 日です。これを自動更新するには以下のように設定します。古くなった証明書の削除には tmpwatch を使っている為、tmpwatch がインストールされていることが前提です(tmpwatch については過去記事を参照)。

証明書の自動更新

/etc/cron.weekly/update-letsencrypt.sh というファイルを以下の内容で新規作成します。証明書の有効期間が 30 日未満の状態で certbot-auto renew を実行すると証明書が更新されます。30 日以上の期間が残っている場合は何も実行されません。タイムスタンプが 90 日以上古くなっている証明書は tmpwatch を使って削除します。

1
2
3
#!/bin/sh
/home/[USERNAME]/certbot/certbot-auto renew
/usr/sbin/tmpwatch -m 90d /etc/letsencrypt/archive/[FQDN]

証明書の有効期間をチェックし、メールで通知する

証明書の有効期間をチェックし、メールで通知するには以下のようなスクリプトを cron で定期実行させます。もっと良い方法もあるかも知れません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

MAIL_TO=[通知先メールアドレス]
FQDN=[FQDN]

TIME=`/bin/date "+%Y/%m/%d %H:%M:%S"`
HOSTNAME=`/bin/hostname`

BEFORE=`openssl s_client -connect ${FQDN}:443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not Before"`
BEFORE=`echo ${BEFORE}`

AFTER=`openssl s_client -connect ${FQDN}:443 < /dev/null 2> /dev/null | openssl x509 -text | grep "Not After"`
AFTER=`echo ${AFTER}`

echo "Time\t${TIME}\nHost\t${HOSTNAME}\n\n${BEFORE}\n${AFTER}" | /usr/bin/mail -s "[CERT]${HOSTNAME} (${TIME})" ${MAIL_TO}