SSL証明書の有効期限をメールで通知するスクリプト

無料のSSL証明書の「Let’s Encrypt」を利用しています。有償のSSL証明書と比べると有効期限が短いので更新を忘れそうなので、SSL証明書の有効期限をチェックしてその期限をメールするスクリプトを作成しました

certbotを利用して証明書の発行・更新をしているので他のツールではエラーになる可能性が高いです。

証明書の有効期限をチェックするドメインは、SSLDOMAIN_FILE="/root/script/ssl_cert_domain.txt" でチェックするドメインを指定しています。ここでのドメイン名は、証明書が保存されているディレクトリの「/etc/letsencrypt/live」ディレクトリ名となります

# cat /root/script/ssl_cert_domain.txt
example.com
example.com-0001
www.example.jp
[root@vultr_www01 ~]# ls -l /etc/letsencrypt/live/
合計 16
-rw-r--r-- 1 root root  740  6月 15 10:55 README
drwxr-xr-x 2 root root 4096  8月 17 12:11 example.com
drwxr-xr-x 2 root root 4096  8月 17 12:14 example.com-0001
drwxr-xr-x 2 root root 4096  8月 15 04:06 www.example.jp

下記のスクリプトでは、ドメイン名があるファイルを1行づつ読んでいき、その証明書を有効期限をチェックした内容をメール本文になるファイルに追記していきます。
#!/bin/bash

LANG=C

SSLDOMAIN_FILE="/root/script/ssl_cert_domain.txt"
SSLKEY_DIR="/etc/letsencrypt/live/"
MAIL_FILE="/var/tmp/sslmail.txt"

cat ${SSLDOMAIN_FILE} | while read DOMAIN
do

  CSRFILE="${SSLKEY_DIR}${DOMAIN}/cert.pem"
  if [ -f ${CSRFILE} ]; then
    TMP_DAYS=`openssl x509 -noout -text -in $CSRFILE | grep "Not" | grep "Not After" | sed 's/Not After : //'`
    DAYS=`date -d "$TMP_DAYS" +%Y/%m/%d`
    echo "$DOMAIN : $DAYS" >> $MAIL_FILE
  fi

done

cat $MAIL_FILE | mail -s "SSL Cert CHECK" xxxx@xxxx.com

スクリプトを作成したら、Cronで月に2回ほど実行してメールでSSL証明書の有効期限をメールで知らせるようにしています
# crontab -e
0 5 1,15 * * /root/script/sslcert_check.sh > /dev/null 2>&1

スクリプトを実行すると下記のようなメールが送信されて、SSL証明書の有効期限を確認できます

【件名】
SSL Cert CHECK
【本文】
example.com : 2020/11/15
example.com-0001 : 2020/11/15
example.jp : 2020/11/13

スポンサーリンク