Masdika Loading..
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portfolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  • Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt
  • Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  • Panduan Lengkap Deploy WordPress + Redis + MySQL di Kubernetes dengan SSL Cloudflare
  • Panduan Lengkap Install & Konfigurasi Ceph 3 Node dengan RGW (S3 Compatible)

Recent Comments

  1. Riyan on Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  2. Ardian on Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  3. Masdika.ID on Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  4. Rudy on Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  5. Firman on Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)

July 30, 2025 Tutorial by Masdika.ID
Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)

Mengelola sertifikat SSL secara otomatis sangat penting untuk mencegah gangguan layanan akibat sertifikat yang kedaluwarsa. Dalam panduan ini, kita akan membuat script Bash otomatis untuk mengecek masa aktif SSL, menampilkan hasilnya di terminal, dan mengirimkan laporan via email setiap hari menggunakan msmtp, lengkap dengan konversi waktu ke WIB (GMT+7).

Panduan ini sangat cocok untuk admin server, DevOps, atau pemilik website yang menggunakan Let’s Encrypt dan ingin memastikan sertifikat SSL mereka selalu aktif.

๐Ÿ”ง Fitur Utama Script

  • โœ… Mendukung multi domain SSL (misal: masdika.biz.id, www.masdika.id)
  • ๐Ÿ“… Menampilkan sisa hari sebelum expired
  • ๐Ÿ“ง Mengirim email harian berisi status semua SSL
  • ๐Ÿšจ Jika tinggal sedikit hari (default: 1), langsung kirim peringatan
  • ๐Ÿ•’ Konversi waktu dari GMT ke WIB (Asia/Jakarta)
  • ๐ŸŽจ Desain HTML email yang modern dan responsif (dark navy)

๐Ÿงฉ Prasyarat

Sebelum menggunakan script ini, pastikan:

  • ๐Ÿง Sistem Linux memiliki paket openssl, date, dan msmtp
  • ๐Ÿ” Sudah tersedia file sertifikat .crt hasil dari Let’s Encrypt / Caddy
  • โœ‰๏ธ Konfigurasi SMTP sudah siap di ~/.msmtprc (contoh: Gmail, Mailgun, Mailjet)

๐Ÿ“ซ Contoh Konfigurasi Gmail di ~/.msmtprc

Jika kamu menggunakan Gmail, pastikan:

  • Akun Gmail kamu mengaktifkan 2-Step Verification
  • Kamu telah membuat App Password (16 digit) dari https://myaccount.google.com/apppasswords

Lalu isi konfigurasi ~/.msmtprc seperti ini:

# ~/.msmtprc
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log

account gmail
host smtp.gmail.com
port 587
from [email protected]
user [email protected]
password 16_DIGIT_APP_PASSWORD

account default : gmail

๐Ÿ“œ Script Lengkap: ssl_renew_notifier.sh

#!/bin/bash

export TZ="Asia/Jakarta"

EMAIL="[email protected]"
WARNING_DAYS=1
CERT_PATHS=(
  "data/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/masdika.biz.id/masdika.biz.id.crt"
  "data/caddy_data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/www.masdika.id/www.masdika.id.crt"
)

html_header='<html><body style="background-color:#0d1b2a;color:#ffffff;font-family:sans-serif;padding:20px;"><h2 style="color:#00b4d8;">๐Ÿ” Laporan Status SSL</h2><ul>'
html_footer='</ul><p style="margin-top:40px;font-size:12px;border-top:1px solid #444;padding-top:10px;">Email ini dikirim otomatis oleh server <b>masdika.biz.id</b> pada zona waktu <b>WIB (GMT+7)</b></p></body></html>'
html_content=""

send_email() {
  local subject="$1"
  local body="$2"
  local encoded_subject
  encoded_subject=$(echo -n "$subject" | base64)

  {
    echo "To: $EMAIL"
    echo "Subject: =?UTF-8?B?$encoded_subject?="
    echo "Content-Type: text/html; charset=UTF-8"
    echo ""
    echo "$body"
  } | msmtp -t
}

for cert_path in "${CERT_PATHS[@]}"; do
  if [ -f "$cert_path" ]; then
    domain=$(basename "$cert_path" .crt)
    expiry_raw=$(openssl x509 -enddate -noout -in "$cert_path" | cut -d= -f2)
    expiry_epoch=$(date -u -d "$expiry_raw" +%s)
    expiry_date=$(date -d "@$expiry_epoch" '+%Y-%m-%d %H:%M:%S WIB')
    now_epoch=$(date +%s)
    days_left=$(( (expiry_epoch - now_epoch) / 86400 ))

    echo "โœ… $domain: $days_left hari tersisa (exp: $expiry_date)"
    html_content+="<li><b>$domain:</b> $days_left hari tersisa (exp: $expiry_date)</li>"

    if (( days_left <= WARNING_DAYS )); then
      echo "โš ๏ธ  $domain akan expired dalam $days_left hari, mengirim email..."
      send_email "โš ๏ธ Peringatan SSL $domain tinggal $days_left hari lagi" "$html_header$html_content$html_footer"
      exit 0
    fi
  else
    echo "๐Ÿšซ Sertifikat tidak ditemukan: $cert_path"
    html_content+="<li style='color:#ff6b6b;'><b>$cert_path:</b> Sertifikat tidak ditemukan</li>"
  fi
done

send_email "๐Ÿ“‹ Info Status SSL masdika.biz.id" "$html_header$html_content$html_footer"

โฑ๏ธ Jadwalkan Cron Harian

Buka crontab:

crontab -e

Lalu tambahkan:

0 7 * * * /path/ke/ssl_renew_notifier.sh

โฐ Script akan dijalankan setiap pagi jam 07:00 WIB.

๐Ÿงช Tes Manual

Jalankan script langsung:

bash ssl_renew_notifier.sh

Jika berhasil, kamu akan menerima email seperti ini:

  • ๐Ÿ“ฌ Subjek: ๐Ÿ“‹ Info Status SSL masdika.biz.id
  • ๐Ÿ“„ Isi: HTML berisi list domain dan masa aktif SSL

โœ… Selesai

Dengan sistem ini, kamu akan selalu tahu status sertifikat SSL kamu tanpa harus cek manual. Notifikasi bisa diperluas ke Telegram, Discord, atau logging file jika diinginkan.

Share:
Tags: BashLet's Encryptssl
Related Posts
Panduan Lengkap Deploy WordPress + Redis + MySQL di Kubernetes dengan SSL Cloudflare

Mau bikin website WordPress super cepat, aman, dan bisa di-scale di Kubernetes? ๐Ÿ’ก Artikel ini akan membahas langkah demi langkah…

Panduan Lengkap Deploy Aplikasi Microservices dengan Docker + Caddy SSL

Ingin membangun sistem microservices dengan deployment yang simpel dan aman? Artikel ini akan membimbing kamu langkah demi langkah membuat aplikasi…

Post navigation

Prev
Next
2 Comments
  • Ardian 6:43 am August 29, 2025 Reply

    Menarik mas

    • Riyan 6:46 am August 29, 2025 Reply

      Iya bagus buat dicoba bang

Write a comment Cancel Reply


ยฉ 2025 www.masdika.id โ€” Semua hak cipta dilindungi