犬ターネット

Let's Encrypt の証明書期限通知メールが廃止されるので通知スクリプトを組んだ

2025-02-05 letsencrypt

このサイトのSSL証明書は Let's Encrypt を使っていて、証明書の有効期限が近付くと Let's Encrypt から「そろそろ期限切れるよ~」ってメールが届くんだけど、2025/6/4 にその通知メールの仕組みが廃止されるとのこと。メール送信コストはバカにならないし仕方ないとは思うけれど不便。

https://letsencrypt.org/2025/01/22/ending-expiration-emails/


ということで、SSL証明書の有効期限が近付いたらメール通知するシェルスクリプトを組んだ。SSL証明書の有効期限を openssl コマンドで取得して、14日以内に有効期限が切れる場合にメールを送信する。

#!/bin/bash

# 各変数定義
DOMAIN="mugbum.info"
ALERT_DAYS=14
MAILTO="mail-addr-to@example.com"
MAILFROM="mail-addr-from@example.com"

# SSL証明書の有効期限を openssl コマンド経由で取得
CERT_DATE=$(echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)

# 現在日時を取得
CURRENT_DATE=$(date +"%Y-%m-%d")

# 有効期限と現在日時をタイムスタンプ形式に変換してから残り日数を計算
CERT_TIMESTAMP=$(date -d "$CERT_DATE" +%s)
CURRENT_TIMESTAMP=$(date -d "$CURRENT_DATE" +%s)
REMAINING_DAYS=$(( (CERT_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))

# 残り日数が ALERT_DAYS 以内であればメールを送信
if [ $REMAINING_DAYS -le $ALERT_DAYS ]; then
  SUBJECT="SSL証明書の有効期限が切れそう!"
  BODY="$DOMAIN のSSL証明書の有効期限が切れそう!更新しよう!\n有効期限 : $CERT_DATE"
  echo -e "From: $MAILFROM\nTo: $MAILTO\nSubject: $SUBJECT\n\n$BODY" | sendmail -t
else
  echo "SSL証明書の有効期限は $REMAINING_DAYS 日後です。"
fi

上記を適当なファイル名で保存し(ここでは sslalert.sh とした)、実行権限を付与、

chmod +x sslalert.sh

crontab で毎日9時に実行するよう設定して終了。

crontab -e
0 9 * * * /path/to/sslalert.sh

SSL証明書の有効期限が近付くと毎朝9時に以下のようなメールが届く。

SSL証明書有効期限チェックメール


≪ 2025-02-08
牛丼と距離感

2025-02-04 ≫
mozu / Tales of Faults - EP