EUComply

SSL Certificate Expiry Monitoring: Never Get the "Your Connection Is Not Private" Surprise (2026)

Updated August 31, 2026 · 6 min read

TL;DR Expired TLS certificates are still one of the most common causes of sudden outages — and they are almost always preventable, because the expiry date is known months in advance. The failure isn't technical, it's that nobody was watching the date. Check your certificates now with openssl s_client or an online checker, then set up automated expiry monitoring so you get warned at 30, 14 and 7 days. DeskUptime checks certificate expiry on every scheduled run and warns you in the app — $19 once, no subscription.
Check any site right now — free
Status, response time and SSL certificate expiry in seconds. No sign-up.
Want an alert before it breaks? DeskUptime monitors it for you — $19 once, no subscription.

Why expired certificates keep taking websites down

When a TLS certificate expires, browsers don't show a gentle warning — they put up a full-page red screen ("Your connection is not private") and many visitors leave immediately. API clients start rejecting requests. Mobile apps that pin certificates can stop working entirely.

The pattern behind nearly every incident is the same:

Even with Let's Encrypt's 90-day certificates, renewal failures are common enough that certificate expiry remains a top-five cause of avoidable downtime for small and mid-size sites.

Step 1: Check your expiry dates right now

On any Mac or Linux machine:

echo | openssl s_client -servername yoursite.com -connect yoursite.com:443 2>/dev/null \
  | openssl x509 -noout -dates -issuer -subject

This prints notBefore and notAfter — the dates that matter. Do this for every domain and subdomain you run, including staging and API hosts. Don't forget certificates on mail servers or load balancers, which browser visitors never see but other systems depend on.

Step 2: Fix auto-renewal properly

If you use Let's Encrypt / Certbot, verify renewal actually works instead of assuming it does:

certbot renew --dry-run

If it fails, fix it today. Common causes: the HTTP-01 challenge path is blocked, the DNS record points somewhere else since a migration, or the cron/systemd timer was disabled. If you're on Cloudflare or another proxy with origin certificates, note those have long lifetimes but still expire — and they won't renew themselves.

Step 3: Monitor expiry independently of renewal

This is the step most teams skip. Auto-renewal can break at any time; monitoring tells you before the expiry date whether something went wrong. You want alerts at roughly 30, 14 and 7 days before expiry — early enough to react calmly.

OptionCostGood for
Certbot hooks / custom script + emailFreeSingle-server setups where you control cron
UptimeRobot SSL checksFree tier (5-min checks)A handful of public URLs
Pingdom / Site24x7 SSL checks$15+/monthTeams already paying for full SaaS monitoring
DeskUptime desktop monitor$19 one-timeFrequent SSL + uptime checks from your own machine, no monthly bill

What to look for in a monitoring setup

How DeskUptime handles it

DeskUptime runs on your Mac or Windows PC and re-checks every monitored URL on your schedule — as often as every minute if you want. Each HTTPS check validates the certificate chain and tracks days until expiry, so a soon-to-expire cert shows up in the dashboard long before browsers block anyone. Because it runs locally, there's no per-monitor pricing and no data about your infrastructure sent to a third party.

npx github:mahope/deskuptime check https://yoursite.com

The CLI above gives you an instant health report including certificate status; the desktop app adds continuous scheduling and notifications.

Quick checklist

  1. List every hostname you serve over HTTPS (including internal ones).
  2. Check each cert's notAfter date with openssl.
  3. Run certbot renew --dry-run (or your platform's equivalent).
  4. Set up independent expiry monitoring with 30/14/7-day warnings.
  5. Add cert checks for staging and API hosts too — customers aren't the only ones who break.

Certificate expiry is the cheapest outage to prevent: the date is printed on the certificate itself. All that's missing is something watching it.