Masdika Loading..
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portofolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.BIZ.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • CI/CD Laravel: Otomatisasi Deployment dengan Jenkins & Docker
  • Cara Kirim Notifikasi Otomatis SSL Expired via Email (Lengkap + Bash Script)
  • Panduan Lengkap Autoscaling di Kubernetes Bare-Metal (Lengkap untuk Pemula)
  • Panduan Lengkap: Deploy Website Statis ke Kubernetes Menggunakan Docker + NodePort
  • Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern

Recent Comments

  1. Masdika.BIZ.ID on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  2. VSTRA on Cara Cerdas Menguasai Kubernetes (K8s): Panduan Lengkap Orkestrasi Kontainer untuk Developer Modern
  3. Rikiy on Cara Mudah Deploy Website Node.js Menggunakan Docker
  4. Masdika.BIZ.ID on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy
  5. someone on Disaster Recovery Cluster (DRC) WordPress dengan MariaDB Galera dan Load Balancer Caddy

Archives

  • August 2025
  • July 2025
  • June 2025

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.BIZ.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.biz.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.biz.id/www.masdika.biz.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

Post navigation

Prev
Next
Write a comment Cancel Reply

ยฉ 2025 www.masdika.biz.id โ€” Semua Hak Dilindungi