The frustrating part is that SSL certificate renewal reminders should be a solved problem. Yet every week, production sites go down because a cert slipped through — the calendar reminder was on a laptop that got wiped, the cron job was on a server that got rebuilt, or the engineer who owned the task left the company.
This guide covers three practical methods for setting up SSL cert expiry reminders, from a five-minute DIY approach to fully automated alerting. Pick the one that matches your infrastructure and the number of domains you manage.
Before choosing a method, it’s worth understanding the common failure modes:
The common thread: a reminder that lives in one place — one calendar, one server, one person’s head — is a single point of failure. The approaches below get progressively more robust.
Before setting up any reminder system, check your current certificate expiry dates so you know what you’re working with:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null \
| openssl x509 -noout -enddate
For a quick days-remaining count:
EXPIRY=$(echo | openssl s_client -connect yourdomain.com:443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
echo $(( ( $(date -d "$EXPIRY" +%s) - $(date +%s) ) / 86400 )) days remaining
Or skip the command line and use the free SSL Certificate Checker to see expiry dates and issuer details instantly.
For developers comfortable with a server, a cron job is the fastest DIY path to a reliable SSL cert expiry reminder. The setup takes under 10 minutes.
#!/bin/bash
# ssl-reminder.sh — sends an ssl certificate alert email when cert expiry is close
DOMAIN="yourdomain.com"
ALERT_DAYS=30
ALERT_EMAIL="you@example.com"
EXPIRY=$(echo | openssl s_client -connect "$DOMAIN":443 -servername "$DOMAIN" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
if [ -z "$EXPIRY" ]; then
echo "SSL reminder: could not retrieve cert for $DOMAIN" \
| mail -s "SSL check error: $DOMAIN" "$ALERT_EMAIL"
exit 1
fi
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s 2>/dev/null \
|| date -j -f "%b %d %T %Y %Z" "$EXPIRY" +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - $(date +%s)) / 86400 ))
if [ "$DAYS_LEFT" -le "$ALERT_DAYS" ]; then
echo "SSL certificate for $DOMAIN expires in $DAYS_LEFT days ($EXPIRY).
Renew at: https://your-registrar.com
Check current status: https://lior-seats.github.io/ssl-cert-checker/" \
| mail -s "⚠️ SSL cert expiry reminder: $DOMAIN ($DAYS_LEFT days)" "$ALERT_EMAIL"
fi
Run it daily at 9am so you see the alert at the start of your workday:
0 9 * * * /path/to/ssl-reminder.sh
For multiple domains, run the script once per domain or loop through a list:
#!/bin/bash
DOMAINS=("yourdomain.com" "api.yourdomain.com" "staging.yourdomain.com")
ALERT_DAYS=30
ALERT_EMAIL="you@example.com"
for DOMAIN in "${DOMAINS[@]}"; do
EXPIRY=$(echo | openssl s_client -connect "$DOMAIN":443 -servername "$DOMAIN" 2>/dev/null \
| openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
[ -z "$EXPIRY" ] && continue
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s 2>/dev/null || date -j -f "%b %d %T %Y %Z" "$EXPIRY" +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - $(date +%s)) / 86400 ))
if [ "$DAYS_LEFT" -le "$ALERT_DAYS" ]; then
echo "$DOMAIN: $DAYS_LEFT days remaining" \
| mail -s "⚠️ SSL expiry reminder: $DOMAIN" "$ALERT_EMAIL"
fi
done
openssl and a working mail command — outbound mail from servers is often blocked or spam-filteredA calendar reminder isn’t inherently unreliable — a single-person calendar reminder is. The pattern that works is a shared calendar entry with multiple owners and staggered lead times.
SSL CERTIFICATE RENEWAL: yourdomain.com
Expiry: [date]
Issuer: [Let's Encrypt / DigiCert / etc.]
Renewal URL: [registrar or CA dashboard link]
Responsible: [primary owner] + [backup owner]
Steps: [link to internal runbook or renewal procedure]
Check current status: https://lior-seats.github.io/ssl-cert-checker/
Calendar reminders work well as a secondary safety net alongside automated monitoring, but they’re not sufficient on their own for production domains.
An automated SSL certificate monitoring tool eliminates the infrastructure dependency problem (cron jobs on servers) and the human dependency problem (calendar reminders people miss). You register a domain once, and the service sends you ssl cert expiry reminders at defined intervals — regardless of what happens to your servers or team calendar.
This point deserves emphasis: even if you have certbot auto-renewal configured, external monitoring is valuable. Certbot can fail silently. Common failure modes include a blocked port 80, a DNS change that breaks the ACME challenge, or an nginx config change that stops serving the /.well-known/acme-challenge/ path.
External monitoring detects the symptom — the cert’s expiry date stopped advancing — rather than the cause. You get alerted 60 days before expiry rather than on the day your users start seeing browser warnings.
Add any domain and get ssl cert expiry reminder emails at 60, 30, and 7 days before the certificate expires. No server setup, no cron jobs, no calendar entries. Works for any domain, any CA, any hosting provider.
Join the SSLWatch waitlist Check your cert free| Situation | Recommended approach |
|---|---|
| 1–2 personal/hobby domains | Cron job or shared calendar reminder |
| Small team, 3–10 domains | Calendar (shared) + cron job as backup |
| Production domains with revenue at stake | Automated monitoring (external, independent) |
| 10+ domains or frequent cert rotations | Automated monitoring only — calendar doesn’t scale |
| Let’s Encrypt with certbot | Automated external monitoring validates auto-renewal is working |
If you’re reading this because a cert just expired or is about to expire, here’s the fastest path to getting a reminder in place:
The goal isn’t a perfect system — it’s a system that has at least two independent paths to alerting you. A cron job plus a shared calendar reminder is significantly more reliable than either alone. Automated external monitoring plus a calendar backup is more reliable still.
SSL certificate renewal reminders are simple in concept and routinely missed in practice. The key points:
SSLWatch sends automated ssl certificate alert emails at 60, 30, and 7 days before expiry — for any domain, any CA. Join the waitlist before the launch on October 12.
Join the waitlist Check your cert free